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

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 mettre un nombre magique pour le poids, car 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 change d'un groupe d'envoi à 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();
    }
}
请先 登录 后评论

3 réponses

Kevin

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();
}
请先 登录 后评论
paan

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
    }
}
请先 登录 后评论
Michał Rudnicki

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

public function createShipment($startZip, $endZip, $weight = 0){
    $weight or $weight = $this->getDefaultWeight();
    ...
}
请先 登录 后评论
  • 11 abonnés
  • 0 favoris,325 Feuilleter
  • cmcculloh posée à 2023-03-02 19:19