Korzystanie z właściwości obiektu jako domyślny dla własności metoda

głosy
21

Próbuję to zrobić (co daje nieoczekiwany błąd T_VARIABLE):

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

Nie chcę, aby umieścić numer magiczny tam na wadze, ponieważ obiekt używam ma defaultWeightparametr, że wszystkie nowe transporty dostać, jeśli nie określi wagę. Nie mogę umieścić defaultWeightw samej przesyłki, ponieważ zmienia się od grupy do grupy przesyłki przesyłki. Czy istnieje lepszy sposób to zrobić niż z poniższych?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Utwórz 04/08/2008 o 18:51
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
12

To nie jest dużo lepiej:

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();
}
Odpowiedział 04/08/2008 o 18:53
źródło użytkownik

głosy
1

To pozwoli Ci zdać wadze od 0 i nadal działa poprawnie. Zauważ operatora === ta sprawdza, czy waga odpowiada „null” zarówno wartości i rodzaju (w przeciwieństwie do ==, który jest tylko wartość, więc 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Odpowiedział 05/08/2008 o 13:49
źródło użytkownik

głosy
1

Można użyć statycznego elementu klasy trzymać domyślne:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Odpowiedział 28/08/2008 o 02:56
źródło użytkownik

głosy
6

Schludny trik z wartości logicznej lub operator:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Odpowiedział 28/08/2008 o 09:10
źródło użytkownik

głosy
0

Poprawa na odpowiedź Kevina jeśli używasz PHP 7 można zrobić:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Odpowiedział 04/06/2019 o 12:34
źródło użytkownik

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