Comparar cadenas con cero en PHP

PHP-logo Hoy me ha ocurrido una cosa muy curiosa y a mi entender es un bug de PHP, la explicación no la sé pero tendrá algo que ver con la forma de interpretar PHP las cadenas. Pongamos un ejemplo:

$cadena = “1234”;
$numero = 0;
echo ($cadena == $numero)?”Son iguales”:”Son distintos”;

El resultado sería son distintos porque php interpreta a $cadena como un número y por supuesto este numero es distinto de cero. Sin embargo si:

$cadena = “hola”;

20071231030306-aurrerapena El resultado que debería ser el mismo que en la opción anterior porque videntemente son distintos es son iguales. Asombrosamente php interpreta esta cadena como falso y por tanto falso == falso es verdadero.

La solución es no utilizar el operador == si se puede dar este caso sino el operador === que si funciona porque es estrictamente igual.

Comentarios

Javier G. ha dicho que…
No es un bug, es una característica de PHP:

http://es2.php.net/manual/es/language.types.string.php#language.types.string.conversion
Reynier de la Rosa ha dicho que…
curioso no conocía esta característica ¡mil gracias por el aporte!