Я пытаюсь сделать это (что приводит к неожиданной ошибке T_VARIABLE):
public function createShipment($startZip, $endZip, $weight =
$this->getDefaultWeight()){}
Я не хочу "defaultWeight"
указывать здесь магическое число для веса, поскольку у объекта, который я использую, есть параметр, который получают все новые партии, если вы не укажете вес. Я не могу поместить defaultWeight
саму отправку, потому что она меняется от группы отгрузки к группе отгрузки. Есть ли лучший способ сделать это, чем следующий?
public function createShipment($startZip, $endZip, weight = 0){
if($weight <= 0){
$weight = $this->getDefaultWeight();
}
}
Это не намного лучше:
public function createShipment($startZip, $endZip, $weight=null){
$weight = !$weight ? $this->getDefaultWeight() : $weight;
}
// or...
public function createShipment($startZip, $endZip, $weight=null){
if ( !$weight )
$weight = $this->getDefaultWeight();
}
Трюк с логическим оператором ИЛИ:
public function createShipment($startZip, $endZip, $weight = 0){
$weight or $weight = $this->getDefaultWeight();
...
}
Это позволит вам пройти вес 0 и по-прежнему работать правильно. Обратите внимание на оператор ===, он проверяет, соответствует ли вес «null» как по значению, так и по типу (в отличие от ==, который является просто значением, поэтому 0 == null == false).
PHP:
public function createShipment($startZip, $endZip, $weight=null){
if ($weight === null)
$weight = $this->getDefaultWeight();
}
Вы можете использовать статический член класса для хранения значений по умолчанию:
class Shipment
{
public static $DefaultWeight = '0';
public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
// your function
}
}
Улучшение ответа Кевина, если вы используете PHP 7, вы можете сделать:
public function createShipment($startZip, $endZip, $weight=null){
$weight = $weight ?: $this->getDefaultWeight();
}