2010-02-24 7 views
5

Acabo de reducir un error loco a lo que está en el título de esta pregunta. Estoy seguro de que hay una Explicación perfectamente razonable de por qué Php piensa que 0 == '%' (o cualquier otro personaje especial, creo). ¡Pensé que sería bueno obtener esa explicación en StackOverflow!if (0 == '%') echo "WTF, Php, ¿por qué no puedes comparar las cosas sanamente?"

+1

http://stackoverflow.com/questions/875854/how-best-to-compare-to-0-in-php –

+0

Es por esto que escribo PHP más o menos la misma manera que escribo C++. ;) – Teekin

Respuesta

6

Usando '===' (para una comparación literal exacta, los valores deben ser del mismo tipo y también iguales) en lugar de '==' resuelve este problema Con '==' está tratando de convertir '%' a un número y 0 es lo mejor que puede hacer.

+1

Si usa ===, tenga cuidado de que $ x = '0'; var_dump ($ x === 0) da falso ($ x es una cadena, 0 es un número entero) :) –

0

desde '%' no es verdad, que debe ser falsa (0), por lo que, por supuesto, 0 == '%'

;-) gracioso sin embargo

+0

No convierte cadena en bool, otro operando es entero y no bool. –

7

Se hará lo mismo a cualquier cadena, la conversión de una cadena sin número a entero siempre da 0.

+0

Por eso (junto con muchas otras locuras) PHP ni siquiera debería considerarse un verdadero "lenguaje de programación". – slashCoder

1

En el caso de que un operador de comparación estricta no sea directamente adecuado, si desea que ambos valores se comparen como cadenas, puede usar strcmp(). Un ejemplo podría ser donde ambos valores son variables, y los tipos pueden ser string o int. En lugar de escribir casting en una cadena y luego usar una estricta comprobación de igualdad, strcmp() puede ser menos detallado.

La coerción del tipo de php es muy conveniente. Pero si no comprende sus muchas reglas (algunas pueden morder), debe intentar evitar usarlas. Ver http://www.php.net/manual/en/types.comparisons.php

Cuestiones relacionadas