Utilizarea proprietății obiect ca implicit pentru proprietatea metodei

voturi
21

Am încercat să fac acest lucru (care produce o eroare neașteptată T_VARIABLE):

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

Nu vreau să pun un număr magic acolo pentru greutate, deoarece obiectul I sînt folosire are un defaultWeightparametru care toate transferurile noi obține dacă nu specificați o greutate. Nu pot pune defaultWeightîn expediere în sine, pentru că se schimbă de la grupul transfer la grupul transport. Există o modalitate mai bună de a face acest lucru decât cele ce urmează?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Întrebat 04/08/2008 la 18:51
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
12

Acest lucru nu este mult mai bine:

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();
}
Publicat 04/08/2008 la 18:53
sursa de către utilizator

voturi
6

truc cu boolean operatorului SAU:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Publicat 28/08/2008 la 09:10
sursa de către utilizator

voturi
1

Puteți utiliza un membru de clasă statică să dețină implicit:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Publicat 28/08/2008 la 02:56
sursa de către utilizator

voturi
1

Acest lucru vă va permite să treacă o greutate de la 0 și încă funcționează în mod corespunzător. Observați operatorul ===, acest lucru verifică dacă greutatea se potrivește „nulă“ în ambele valoare și de tip (spre deosebire de ==, care este doar o valoare, deci 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Publicat 05/08/2008 la 13:49
sursa de către utilizator

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