Utilisation de la propriété d'objet par défaut pour la propriété de méthode
-
08-06-2019 - |
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();
}
}
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();
}