Insinúa una pregunta profunda: ¿cuándo debería ser cierta una expresión?
A continuación, voy a explicar por qué lo que está haciendo no está funcionando y cómo solucionarlo.
En muchos idiomas, null
0
, y la cadena vacía (""
) todo como resultado false, esto puede hacer declaraciones if
bastante sucinta e intuitiva, pero null
, 0
y ""
también son todos diferentes tipos. ¿Cómo deberían ser comparados?
This page nos dice que si tenemos dos variables que se comparan, a continuación, las variables se convierten de la siguiente manera (que sale de la mesa en el primer partido)
Type of First Type of Second Then
null/string string Convert NULL to "", numerical/lexical comparison
bool/null anything Convert to bool, FALSE < TRUE
Así que usted está comparando un valor nulo en comparación con un número. Por lo tanto, tanto el nulo como el número se convierten en booleanos. This page nos dice que en dicha conversión tanto null
como 0
se consideran FALSE
.
Su expresión ahora dice, false==false
, que, por supuesto, es verdad.
Pero no es lo que quiere.
This page proporciona una lista de los operadores de comparación de PHP.
Example Name Result
$a == $b Equal TRUE if $a equals $b after type juggling.
$a === $b Identical TRUE if $a equals $b, AND they are of the same type.
$a != $b Not equal TRUE if $a not equals $b after type juggling.
$a <> $b Not equal TRUE if $a not equals $b after type juggling.
$a !== $b Not identical TRUE if $a not equals $b, or they are not of the same type.
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than/equal TRUE if $a is less than or equal to $b.
$a >= $b Greater than/equal TRUE if $a is greater than or equal to $b.
El primer comparador es la comparación que está utilizando ahora. Tenga en cuenta que realiza las conversiones que mencioné anteriormente.
El uso del segundo comparador solucionará su problema. Como un nulo y un número no son del mismo tipo, la comparación ===
dará como resultado falso, en lugar de realizar la conversión de tipo como lo haría el operador ==
.
Espero que esto ayude.
A menos $ myvariable es un flotador en cuyo caso $ myvariable === floatval (0) – AndyClaw