2010-11-18 21 views
20

tengo una sentencia condicional de este modo:PHP Lazy Evaluación booleana

if($boolean && expensiveOperation()){ ...} 

¿El PHP tiene Evaluación booleana perezoso, es decir, tendrá que comprobar $boolean y no si es falsa molestar a la realización de la operación costosa? Si es así, ¿en qué orden debo poner mis variables?

+0

general me abstenga de poner 2 operaciones en la misma línea de código si no están intrínsecamente relacionados. Hace la legibilidad difícil y no gana tiempo o recursos de computación. –

+1

Apols para mi respuesta incorrecta (ahora eliminada). Pensé que recordaba haberlo probado y que no funcionaba, pero obviamente estoy equivocado. –

+0

@Nathan Al menos tienes una insignia de Presión de Pares :) –

Respuesta

23

Sí lo hace. Se llama evaluación de cortocircuito. Ver los comentarios en el documentation page ...

En cuanto a la orden, realiza los controles basados ​​en Operator Precedence y luego de izquierda a derecha. Por lo tanto:

A || B || C 

evaluará primero A y B y luego sólo si A es falso, y C sólo si A y B son falsas ...

Pero

A AND B || C 

de SIEMPRE evalúe B || C, ya que || tiene una precedencia mayor que AND (no es verdadero para &&).

+0

si * quiere * la evaluación sin circuito corto puede usar una sola y que sería una función de unión booleana. Calcularía ambos valores y luego trataría de realizar un AND entre ellos. – Mikhail

+8

@Mikhail: Sí. Pero debes tener cuidado ya que el sintetizador '&' es en realidad un operador poco inteligente. Entonces 'true & 2' sería falso (ya que' true' es '00000001', y' 2' es '00000010', entonces' AND' sería '00000000') ... – ircmaxell

+0

@Alin: ¡Gracias! Dam Google me llevó a los documentos incorrectos ... Reparado en la respuesta. ¡Gracias! – ircmaxell