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

Translate

J'essaye de faire ceci (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 car l'objet que j'utilise a un"defaultWeight"paramètre que tous les nouveaux envois obtiennent si vous ne spécifiez pas de poids. Je ne peux pas mettre ledefaultWeightdans 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 la suivante?

public function createShipment($startZip, $endZip, weight = 0){
    if($weight <= 0){
        $weight = $this->getDefaultWeight();
    }
}
This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

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

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

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

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

PHP:

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

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
    }
}
La source
Translate

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

public function createShipment($startZip, $endZip, $weight=null){
    $weight = $weight ?: $this->getDefaultWeight();
}
La source