2008-08-04 6 views
21

Je suis en train de le faire (qui produit une erreur T_VARIABLE inattendue):En utilisant la propriété d'objet par défaut pour la propriété de la méthode

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

Je ne veux pas mettre un chiffre magique là-dedans pour le poids, puisque l'objet que j'utilise a un paramètre "defaultWeight" que toutes les nouvelles expéditions reçoivent si vous ne spécifiez pas de poids. Je ne peux pas mettre le defaultWeight dans l'envoi lui-même, car il passe du groupe d'expédition au groupe d'expédition. Y a-t-il une meilleure façon de le faire que ce qui suit?

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

Répondre

13

Ce n'est pas beaucoup mieux:

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

Cela vous permettra de passer un poids de 0 et fonctionne toujours correctement. Notez l'opérateur ===, ceci vérifie pour voir si le poids correspond à "null" dans la valeur et le type (par opposition à ==, qui est juste la valeur, donc 0 == null == faux).

PHP:

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

[@ pix0r] (# 2213) C'est un bon point, cependant, si vous regardez le code original si le poids est passé à 0, il utilise le poids par défaut. – Kevin

1

Vous pouvez utiliser un membre de classe statique pour maintenir la valeur par défaut:

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

astuce avec opérateur booléen OR:

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