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?"
Respuesta
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.
Si usa ===, tenga cuidado de que $ x = '0'; var_dump ($ x === 0) da falso ($ x es una cadena, 0 es un número entero) :) –
desde '%' no es verdad, que debe ser falsa (0), por lo que, por supuesto, 0 == '%'
;-) gracioso sin embargo
No convierte cadena en bool, otro operando es entero y no bool. –
Se hará lo mismo a cualquier cadena, la conversión de una cadena sin número a entero siempre da 0.
Por eso (junto con muchas otras locuras) PHP ni siquiera debería considerarse un verdadero "lenguaje de programación". – slashCoder
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
- 1. En PHP, ¿por qué echo no se implementó como una función? (no echo vs. printf)
- 2. ¿Por qué no puedes UnRegisterStartupScript?
- 3. ¿Por qué usar #if 0 para comentar en bloque?
- 4. xargs - if condition and echo {}
- 5. cuando intento echo $ 10 Conviene convierte echo $ 1 0
- 6. Echo PHP dentro de Javascript?
- 7. ¿Por qué Javascript `if ... else if` no termina con` else`?
- 8. PHP Echo Line Breaks
- 9. ¿Por qué main no devuelve 0 aquí?
- 10. Ejecutando if @@ rowcount> 0 resetea @@ rowcount a 0. ¿Por qué?
- 11. #if 0 como definen
- 12. PHP empty var == 0?
- 13. if ($ ext == ('zip' || 'png')) {echo "¿Es posible?" }
- 14. ¿Por qué no puedes llamar funciones abstractas de clases abstractas en PHP?
- 15. php if estática en
- 16. If (Array.Length == 0)
- 17. ¿Por qué datetime no se puede comparar?
- 18. ¿Por qué agregar cosas a una lista hace cosas diferentes?
- 19. ¿Por qué esta cadena repite 0?
- 20. ¿Por qué está bien comparar un puntero con '\ 0'? (pero no 'A')
- 21. ¿Por qué no puedes desarrollar juegos XNA en VB.Net?
- 22. ¿Por qué if/else vs. or/exit en PHP?
- 23. echo Javascript window.location.href no funciona
- 24. Javascript: ¿Por qué comparar con null?
- 25. ¿Por qué no lo es. Excepto (LINQ) que compara las cosas correctamente? (usando IEquatable)
- 26. ¿Por qué este programa PHP no funciona?
- 27. ¿Por qué no puedes pasar las funciones de MYSQL a las declaraciones de PDO preparadas?
- 28. comando Echo no hace nada
- 29. PHP: ¿Qué hacen las llaves en $ variable {0}?
- 30. echo/print problema en php while loop
http://stackoverflow.com/questions/875854/how-best-to-compare-to-0-in-php –
Es por esto que escribo PHP más o menos la misma manera que escribo C++. ;) – Teekin