Question

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

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

Je ne veux pas y mettre un nombre magique pour le poids puisque l'objet que j'utilise a un "defaultWeight" paramètre que reçoivent toutes les nouvelles expéditions si vous ne spécifiez pas de poids.je ne peux pas mettre le defaultWeight dans l'expédition elle-même, car elle change d'un groupe d'expédition à l'autre.Existe-t-il une meilleure façon de procéder que la suivante ?

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

La solution

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

Autres conseils

Astuce intéressante avec l'opérateur booléen OR :

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

Cela vous permettra de passer un poids de 0 tout en continuant à fonctionner correctement.Notez l'opérateur ===, il vérifie si le poids correspond à "null" à la fois en valeur et en type (par opposition à ==, qui est juste une valeur, donc 0 == null == false).

PHP :

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

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
    }
}

Pour améliorer la réponse de Kevin, si vous utilisez PHP 7, vous pouvez :

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top