Para el caso muy común de asignar un valor a una variable en función del resultado de una expresión que soy un fan de los operadores ternarios:condicionalmente la asignación de valores de PHP
$foo = $bar ? $a : b;
Sin embargo, si $ bar es relativamente operación costosa y quiero asignar el resultado de la barra de $ a $ foo si el resultado es Truthy, esto es ineficiente:
$foo = SomeClass::bigQuery() ? SomeClass::bigQuery() : new EmptySet();
Una opción es:
$foo = ($result = SomeClass::bigQuery()) ? $result : new EmptySet();
Pero prefiero no tener el $result
extra en la memoria.
La mejor opción que tengo es:
$foo = ($foo = SomeClass::bigQuery()) ? $foo : new EmptySet();
O, sin operadores ternarios:
if(!$foo = SomeClass::bigQuery()) $foo = new EmptySet();
O, si los operadores de flujo del programa no son su estilo:
($foo = SomeClass::bigQuery()) || ($foo = new EmptySet());
Tantas opciones, ninguna de ellas realmente satisfactoria. ¿Cuál usarías, y me estoy perdiendo algo realmente obvio aquí?
yo personalmente evitar PHP 5.3 sólo sintaxis , y prefiere '$ x = caro(); Si (!$ x) $ x = $ predeterminado; ' – meagar
Wow; Solo iba a comentar con "PHP necesita la [extensión de GNU para ternaries] (http://stackoverflow.com/questions/3319075/ternary-conditional-operator-behaviour-would-leaving-one-expression-empty)" –
ah ha - lo perdí en el manual. Supongo que eso significa que no hay un mejor método para 5.2.x (que tengo que apoyar en el mediano plazo)? – Hamish