Foros del Web » Programando para Internet » PHP »

Asignación "elegante" en base a una comparación booleana.

Estas en el tema de Asignación "elegante" en base a una comparación booleana. en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 26/03/2009, 16:04
Avatar de Wind  
Fecha de Ingreso: junio-2008
Ubicación: Oficinas de Pulsem
Mensajes: 8
Antigüedad: 15 años, 10 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
  #2 (permalink)  
Antiguo 26/03/2009, 17:42
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Asignación "elegante" en base a una comparación booleana.

No se si sea bonita o elegante, pero creo que es mas legible si encierras la condicion entre parentesis y agregas espacios entre cada operador:

Código php:
Ver original
  1. $variable = (isset($otra_variable) && $otra_variable) ? $otra_variable : $default;
__________________
- León, Guanajuato
- GV-Foto
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:05.