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"