Utilizzo della proprietà dell'oggetto come impostazione predefinita per la proprietà del metodo
-
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();
}
}
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();
}