Vă mulțumim pentru susținere

Utilizarea proprietății obiect ca implicit pentru proprietatea metodei

Încerc să fac acest lucru (care produce o eroare neașteptată T_VARIABILĂ):

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

Nu vreau să pun un număr magic în greutate, deoarece obiectul pe care îl folosesc are un parametru "defaultWeight" pe care îl primesc toate transferurile noi dacă nu specificați o greutate. Nu pot pune codul defaultWeight în sine, deoarece se schimbă de la grupul de expediere la grupul de transport. Există o modalitate mai bună de a face acest lucru decât următoarele?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
0
adăugat editat

4 răspunsuri

Acest lucru nu este mult mai bun:

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();
}
0
adăugat

Aceasta vă va permite să treceți o greutate de 0 și să funcționați corect. Observați operatorul ===, acesta verifică dacă greutatea se potrivește "null" atât în ​​valoare, cât și în tip (spre deosebire de ==, care este doar valoare, deci 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
0
adăugat
[@ pix0r] (# 2213) Cu toate acestea, dacă te uiți la codul original, dacă greutatea este trecută ca 0, folosește greutatea prestabilită.
adăugat autor Kevin

Șmecherie cu operatorul boolean:

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

Puteți utiliza un membru de clasă statică pentru a menține valoarea implicită:

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