Utilisation de la propriété d'objet par défaut pour la propriété de méthode

J'essaye de faire ceci (qui produit une erreur T_VARIABLE inattendue):

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

Je ne veux pas mettre de nombre magique pour le poids, puisque l'objet que j'utilise possède 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();
    }
}
0

4 Réponses

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

Cela vous permettra de passer un poids de 0 et encore fonctionner 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
ajouté
[@ 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.
ajouté l'auteur Kevin, source

Astuce Neat avec opérateur booléen OU:

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

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

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