Ver Mensaje Individual
  #149 (permalink)  
Antiguo 29/12/2010, 21:47
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Juego: "¿Dónde está el error?"

La clave está en la línea que citó abimaelrc.

Código PHP:
$foo false OR $true
Resulta que el operador lógico || no funciona de la misma manera que OR. Ciertamente el primero tiene mayor prioridad que el segundo.

Esto se ve más claro en el siguiente ejemplo:

Uso del operador ||
Código PHP:
$foo false || true;
var_dump($foo); // true

// Es equivalente a:
$foo = ( false || true );
var_dump($foo); // true 
Como es lógico, la expresión (false || true) devuelve true, ya que basta que uno de los dos sea verdadero.

Uso del operador OR
Código PHP:
$foo false OR true;
var_dump($foo); // false

// Es equivalente a:
$foo false ) OR true;
var_dump($foo); // false 
En este segundo caso, ya que OR tiene menor importancia, primero se asigna "false" a $foo, y el resultado de esta expresión pues es el mismo valor, osea, false. Luego, recién se opera con la segunda expresión (luego del OR) que sería true. El resultado de toda esta expresión sería true, pero $foo no recibe este valor final, ya que es evaluado al inicio. De hecho, nadie lo toma, pero se puede comprobar de la siguiente forma:

Código PHP:
// $foo = false OR true == false OR true == true
var_dump$foo false OR true ); //true 
En resumen. El comportamiento es el correcto al usar el operador OR. Si usáramos el operador || obtendríamos el resultado "esperado"