Ved hjelp av objektet eiendom som standard for metode eiendom

stemmer
21

Jeg prøver å gjøre dette (som produserer en uventet T_VARIABLE feil):

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

Jeg ønsker ikke å sette en magisk tall der for vekt, ettersom objektet jeg bruker har en defaultWeightparameter som alle nye forsendelser få hvis du ikke angir en vekt. Jeg kan ikke sette defaultWeighti forsendelsen seg selv, fordi det skifter fra forsendelse gruppe forsendelse gruppe. Finnes det en bedre måte å gjøre det på enn følgende?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
Publisert på 04/08/2008 klokken 17:51
kilden bruker
På andre språk...                            


5 svar

stemmer
13

Dette er ikke mye bedre:

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();
}
Svarte 04/08/2008 kl. 17:53
kilden bruker

stemmer
6

Godt triks med boolske operatoren OR:

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
Svarte 28/08/2008 kl. 08:10
kilden bruker

stemmer
1

Du kan bruke en statisk klassemedlem til å holde standard:

class Shipment
{
    public static $DefaultWeight = '0';
    public function createShipment($startZip,$endZip,$weight=Shipment::DefaultWeight) {
        // your function
    }
}
Svarte 28/08/2008 kl. 01:56
kilden bruker

stemmer
1

Dette vil tillate deg å passere en vekt på 0 og fortsatt fungere. Legg merke til === operatøren, sjekker dette for å se om vekten matcher "null" i både verdi og type (i motsetning til ==, som er like verdi, så 0 == null == false).

PHP:

public function createShipment($startZip, $endZip, $weight=null){
    if ($weight === null)
        $weight = $this->getDefaultWeight();
}
Svarte 05/08/2008 kl. 12:49
kilden bruker

stemmer
0

Bedre på Kevin svar hvis du bruker PHP 7 kan du gjøre:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Svarte 04/06/2019 kl. 12:34
kilden bruker

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