2012-06-01 23 views
8

Ésta es una pregunta que me está molestando desde hace mucho tiempo y no se puede encontrar ninguna respuesta ... di cuenta de que usa mucho por los desarrolladores de Zend Framework,PHP - invierte el orden en sentencia if

¿Cuál es la diferencia entre seguir 2 declaraciones "si"? :

if (null === $this->user) { ... } 

if ($this->user === null) { ... } 

Para mí, el primero de ellos se ve un poco extraño;]

Gracias por la respuesta.

Respuesta

13

Ésta no es una diferencia por la forma en la secuencia de comandos funciona, es sólo un estándar de codificación, una recomendación

la razón por la que se recomienda usarlo de esta manera:

if (null == $this->user) 

es el hecho de que si alguna vez se equivoca y escribir = en vez de == obtendrá un error, mientras que

($this->user = null) 

en lugar de

($this->user == null) 

obras pero causa bichos raros (misiones y el valor final se evalúa como bool en lugar de comparación)

y supongo que sólo se extendió como un hábito a la estricta operador de comparación (===)

Actualización: ya que veo que todavía hay algo de actividad en este hilo, incluso 3 años después de haber publicado la respuesta me imagino d Agregaría algo que olvidé mencionar. Este tipo de notación se conoce como yoda conditions, puede leer más sobre él en this wikipedia page por ejemplo.

+1

Gracias! Muerto simple pero no pudo encontrar ninguna respuesta ... – alchemication

+0

@alchemication Estoy contento de que ayude, fue una buena pregunta +1 – mishu

+0

que también suena como una muy buena razón para usar 'is_null ($ var)' o '! Is_null ($ var) 'siempre que sea posible y práctico. Elimina el trabajo de adivinar. – RockyFord

1

No hay diferencia en el orden al comparar valores.

Puede ser más fácil para alguien leer o escribir dicho código, pero para mí es lo mismo que escribir de derecha a izquierda.

1

Tal orden de elementos, en comparación, creo que está destinado a evitar la asignación accidental en sentencias if.

1

El resultado será el mismo, sin embargo, el segundo es lógico. ¿Quieres comprobar si la variable es NULL, NULL si no es la variable ... La razón para hacerlo a la inversa, se describe aquí: http://umumble.com/blogs/Programming/321/

1

Se llaman condiciones yoda.

La idea es que si pones el valor primero (como falso, nulo, verdadero o cualquier cosa corta) es más fácil para una persona escanear el enunciado y comprender rápidamente la intención de la condición.

Además, ¿qué mishu dijo :)

1

Si accidentalmente escribe:

if (null = $this->user) { ... } 

obtendrá un error de sintaxis.

Si accidentalmente escribe:

if ($this->user = null) { ... } 

que será la búsqueda de una razón del extraño comportamiento de su aplicación durante mucho tiempo.

+0

Ok, muchas gracias. ¡Eso es exactamente lo que estaba buscando! – alchemication

4

Es una buena práctica para escribir la declaración if. Considere este código:

if (10 == $var) { 
    echo 'true'; 
} else { 
    echo 'false'; 
} 

Si ha olvidado un signo igual:

if (10 = $var) { } 

entonces PHP generar error de análisis, para que sepa se ha perdido uno = y se puede arreglar. Pero este código:

if ($var = 10) { } 

asignará 10 a $var y siempre se evalúa como verdadera condición. Cualquiera que sea el contenido de $var, el código anterior siempre se repetirá "verdadero" y es muy difícil encontrar este error.

+0

Bueno, tiene sentido, creo que Eclipse solía resaltar un solo "=" en las declaraciones if como un error para mí, pero Net Beans no ... así que podría ser útil como una buena práctica, ¡Gracias! – alchemication

Cuestiones relacionadas