Estoy acostumbrado a Java y por lo tanto, siempre que las condiciones se interpretan de izquierda a derecha, es decir, hay una diferencia fundamental en null != $obj
y$obj != null
Ahora parece que este no es el caso con PHP.
¿Puedo hacer algo mal en PHP cuando siempre comienzo con null
el lado izquierdo? ¿Puedo mantener mi comportamiento de Java o necesito entrenarme para hacer algo más cuando trato con condiciones PHP?
php
object-oriented
code-quality
conditions
Mago de la tecnología
fuente
fuente
null = $a
es asignación ynull != $a
es comparación, ¿querías decirnull == $a
?null = $a
no funcionará, y sí, el orden de interpretación de las tareas es significativo, y tampoco funcionaría en Java. ¿Estamos hablando de condicionales o asignaciones?Respuestas:
Le recomiendo que use siempre los operadores de comparación estrictos
===
y,!==
si es posible. Sabrá cuándo realmente necesita operadores de comparación sueltos.Malentendidos
Creo que puede estar confundido acerca de un par de cosas:
No,
PHP evalúa las condiciones de izquierda a derecha, pero se detiene una vez que se conoce el resultado:
Si
expr1
a evalúafalse
,expr2
serán no ser evaluados. Esto se llama cortocircuito y no parece estar muy bien documentado : no pude encontrar ninguna otra nota oficial sobre el asunto, excepto el comentario en el Ejemplo # 1. Sin embargo, es una característica bien conocida .Falacias
Ergo: nada , no sequitur. La conclusión no se sigue de la premisa. Usar
constant == $variable
o$variable == constant
no está conectado a cortocircuito , orden de evaluación o precedencia del operador .Comportamiento indefinido
Ambos operandos de
!=
son siempre evaluados. En el caso de PHP, el orden de evaluación (que aquí es irrelevante) en realidad no está especificado (como ausente de la documentación).fuente
"nor is there in Java to my knowledge."
he leído la sección 15.7, pero no es importante aquí . Mientras no tenga efectos secundarios en su comparación (como en su ejemplo), el orden de evaluación no importa. ¿Qué parte encuentras ofensiva?Con respecto a su caso particular, otro enfoque sería utilizar la función php integrada is_null. Por lo tanto, terminaría con is_null ($ mixedValue) que haría todo el trabajo por usted y haría la comparación de tipos y todo lo demás.
fuente
@ phant0m: OK punto tomado ... ¡NUNCA USE! = o == siempre use! === y === cuando codifica con PHP. Por lo tanto, esta pregunta era incorrecta al principio, y no hay una mejor práctica con NULL en ambos lados de la condición cuando se trata de PHP.
fuente
$a == NULL
codifica la intención,NULL == $a
agrega una salvaguarda), y esta seguridad ni siquiera es tan fuerte porque todavía depende del trabajo manual (hábitos) en lugar de verificaciones automáticas imposibles de verificar. No creo que la compensación valga la pena, pero eso es una cuestión de opinión personal.23 == num_apples
) en lugar de "si tienes veintitrés manzanas" (num_apples == 23
) .>
y<
, lo leeré más como "Si ese es más grande", entonces lea el que debería ser más grande para que pase el condicional, luego el otro lado.