Pour le cas très fréquent d'attribuer une valeur à une variable en fonction du résultat d'une expression que je suis un fan des opérateurs ternaires:conditionnellement attribuer des valeurs PHP
$foo = $bar ? $a : b;
Cependant, si la barre de $ est relativement opération coûteuse et je veux affecter le résultat de la barre de $ à $ foo si le résultat est truthy, cela est inefficace:
$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();
Une option est:
$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();
Mais je préfère ne pas avoir le $result
supplémentaire en mémoire.
La meilleure option que j'ai est:
$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();
Ou, sans opérateurs ternaires:
if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();
Ou, si les opérateurs de flux de programme ne sont pas votre style:
($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());
Autant d'options, pas vraiment satisfaisantes. Lequel utiliseriez-vous, et est-ce que je manque quelque chose de vraiment évident ici?
J'évite personnellement PHP syntaxe 5.3 uniquement , et préfèrent '$ x = cher(); si (!$ x) $ x = $ par défaut; ' – meagar
Wow; J'allais juste commenter avec "PHP a besoin de l'extension [GNU pour ternaries] (http://stackoverflow.com/questions/3319075/ternary-conditional-operator-behaviour-when-leaving-one-expression-empty)" –
ah ha - manqué que dans le manuel. Je suppose que cela signifie qu'il n'y a pas de meilleure méthode pour 5.2.x (que je dois soutenir à moyen terme)? – Hamish