Utilizzo della proprietà dell'oggetto come impostazione predefinita per la proprietà del metodo

StackOverflow https://stackoverflow.com/questions/1453

  •  08-06-2019
  •  | 
  •  

Domanda

Sto provando a fare questo (che produce un errore T_VARIABLE imprevisto):

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

Non voglio inserire un numero magico per il peso poiché l'oggetto che sto utilizzando ha a "defaultWeight" parametro che ricevono tutte le nuove spedizioni se non si specifica un peso.Non posso mettere il defaultWeight nella spedizione stessa, perché cambia da gruppo di spedizioni a gruppo di spedizioni.Esiste un modo migliore per farlo rispetto al seguente?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
È stato utile?

Soluzione

Questo non è molto meglio:

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();
}

Altri suggerimenti

Bel trucco con l'operatore booleano OR:

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

Ciò ti consentirà di superare un peso pari a 0 e continuare a funzionare correttamente.Notare l'operatore ===, questo controlla se il peso corrisponde a "null" sia in valore che in tipo (al contrario di ==, che è solo valore, quindi 0 == null == false).

PHP:

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

È possibile utilizzare un membro della classe statica per contenere l'impostazione predefinita:

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

Migliorando la risposta di Kevin se stai utilizzando PHP 7 puoi fare:

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top