to be or not to be

marzo 2, 2010

Suelo usar el operador “or”, por ser mas legible, y alguna vez he tenido problemas. Nunca he sabido muy bien. Observa por ejemplo este código:


$or= "to be" or "not to be";
$barras= "to be" || "not to be";
echo $or,"-",$barras; #Devuelve to be-1

¿que ha pasado para que el resultado no sea el mismo? Que alguien en su día, tuvo la ocurrencia de dejar el operador “or” con una baja precedencia, así que la primera línea equivale a una asignación ($or="to be") y seguida de “or” al que nunca se llega por evaluación perezosa.

Este curioso comportamiento provoca el típico error tonto cuando intentas hacer algo así como “if ( $v= false or true )”, que provoca la ejecución del bloque if, aunque $v sea falso….

Vamos a hacer un test para ver si los has entendido. ¿son iguales estas dos instrucciones?


echo "to be" or "not to be";
print "to be" or "not to be";

Pues no…se imprime “1to be”, ya que la segunda instrucción es en realidad un print 'to be' seguido de algo que no se evalúa, ya que print devuelve el nº de argumentos impresos (1 = true).

En fin, que el php es asín (como el fútbol)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: