Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/03/2009, 16:04
Avatar de Wind
Wind
 
Fecha de Ingreso: junio-2008
Ubicación: Oficinas de Pulsem
Mensajes: 8
Antigüedad: 16 años, 8 meses
Puntos: 0
Asignación "elegante" en base a una comparación booleana.

Hola gente.

Tengo una duda que hasta ahora me animo a preguntar. He visto desde hace tiempo que en javascript es posible hacer una asignación en base a una comparación booleana. Ejemplo:

Código:
var foo = bar || myvar || false;
Claro que bar y myvar deben estar definidas. Debido al comportamiento cortocircuito de la comprobación, foo obtendrá el valor de bar. Si bar es vacío ( '' / null / 0 / false ) entonces asignará myvar y si ésta está también vacía se asignará el último valor de la comparación booleana (en este caso false) que sería como un valor default si bar y myvar no tienen valor. En resumen, permite definir una serie de variables/valores de la cual el primero en no ser vacío se asignará a la variable.

¿Cómo hago esto en PHP?
Si intentamos lo anterior en PHP, la operación de comparación booleana devuelve un booleano (como debería ser) y no el valor de la variable.
Teniendo $bar = '', $myvar = 0 y $default = 'foobar' en:

Código PHP:
$mivar $bar || $myvar || $default
$mivar tendrá el valor 1 y no 'foobar' como sería en JS.

Hay alguna alternativa PHP que sea igual de elegante?
Esto NO es elegante (a mi gusto):

Código PHP:
$foo $bar?$bar:($myvar?$myvar:$default)); 
Para el caso de comprobar la existencia y valor distinto a ('' / false/ null / 0) de una variable uso:

Código PHP:
$mivar = isset($mivar)&&$mivar?$mivar:$default
Alguien tiene una alternativa "más bonita"?

Gracias!

Última edición por Wind; 26/03/2009 a las 16:10