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

голоса
21

Я пытаюсь сделать это (что вызывает непредвиденную ошибку 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();
    }
}
Задан 04/08/2008 в 18:51
источник пользователем
На других языках...                            


5 ответов

голоса
12

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

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();
}
Ответил 04/08/2008 в 18:53
источник пользователем

голоса
6

Аккуратный трюк с Логическим ИЛИ оператором:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Ответил 28/08/2008 в 09:10
источник пользователем

голоса
1

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

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Ответил 28/08/2008 в 02:56
источник пользователем

голоса
1

Это позволит вам передать вес от 0 и до сих пор работает должным образом. Обратите внимание, что оператор ===, это проверяет, если вес соответствует «нулевому» как в стоимости и типа (в отличие от ==, что это просто значение, так 0 == NULL == лжи).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Ответил 05/08/2008 в 13:49
источник пользователем

голоса
0

Улучшение после ответа Кевина, если вы используете PHP 7 вы можете сделать:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Ответил 04/06/2019 в 12:34
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more