Сведения о вопросе

FELL

16:03, 1st July, 2020

Теги

Использование свойства объекта по умолчанию для свойства метода

Просмотров: 475   Ответов: 4

Я пытаюсь сделать это (что приводит к неожиданной ошибке 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();
    }
}



  Сведения об ответе

lats

18:03, 1st July, 2020

Это не намного лучше:

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();
}


  Сведения об ответе

$DOLLAR

18:03, 1st July, 2020

Ловкий трюк с булевым оператором OR:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}


  Сведения об ответе

lats

18:03, 1st July, 2020

Это позволит вам пройти вес 0 и все еще работать правильно. Обратите внимание на оператор===, это проверяет, соответствует ли вес "null" как в значении, так и в типе (в отличие от ==, который является просто значением, поэтому 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}


  Сведения об ответе

baggs

18:03, 1st July, 2020

Вы можете использовать статический член класса для хранения значения по умолчанию:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться