Использование свойства объекта по умолчанию для свойства метода
Я пытаюсь сделать это (что приводит к неожиданной ошибке 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();
}
}
Ответы
Ответ 1
Это не намного лучше:
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();
}
Ответ 2
Аккуратный трюк с булевым оператором OR:
public function createShipment($startZip, $endZip, $weight = 0){
$weight or $weight = $this->getDefaultWeight();
...
}
Ответ 3
Это позволит вам передать вес 0 и работать правильно. Обратите внимание на оператор ===, это проверяет, соответствует ли весу "null" как по значению, так и по типу (в отличие от ==, который является просто значением, поэтому 0 == null == false).
PHP:
public function createShipment($startZip, $endZip, $weight=null){
if ($weight === null)
$weight = $this->getDefaultWeight();
}
Ответ 4
Вы можете использовать статический член класса для хранения значения по умолчанию:
class Shipment
{
public static $DefaultWeight = '0';
public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
// your function
}
}
Ответ 5
Улучшение ответа Кевина, если вы используете PHP 7, вы можете сделать:
public function createShipment($startZip, $endZip, $weight=null){
$weight = $weight ?: $this->getDefaultWeight();
}