Использование свойства объекта по умолчанию для свойства метода
-
08-06-2019 - |
Вопрос
Я пытаюсь сделать это (что приводит к неожиданной ошибке 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();
}
Другие советы
Аккуратный трюк с логическим оператором OR:
public function createShipment($startZip, $endZip, $weight = 0){
$weight or $weight = $this->getDefaultWeight();
...
}
Это позволит вам присвоить вес 0 и при этом работать должным образом.Обратите внимание на оператор ===, он проверяет, соответствует ли вес "нулю" как в значении, так и в типе (в отличие от ==, который является просто значением, поэтому 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();
}