true == false
Una de las muchas diferencias entre PHP y Java es que el primero realiza las conversiones entre tipos de forma implícita durante la ejecución; no necesita que nadie le diga en qué debe convertir las variables.
Esto puede tener consecuencias curiosas:
$a = 'string';
$b = 0;
if ( $a == true && $b == false && $a == $b )
{
echo ( 'universe broken' );
}
Y es que, efectivamente, la condición anterior se cumple. Es decir, true == false.



Logico.
al pasar $a a lógico para la comparación equivale a true, ya que es una cadena distinta de ”
al pasar $b a lógico para la comparación equivale a false, ya que es un numero = 0
al pasar $a a entero para la comparación equivale a 0 (observa el valor que devuelve intval(’string’)), ya que no es una cadena que contenga un numero.
Victor M. Varela
8 Agosto, 2008 a 10:13
Sí, la explicación está clara. El problema (o no tan problema) está en la paradoja de que
verdadero = falso, provocada por la conversión entre tipos de PHP.No es el único lenguaje con este tipo de curiosidades.
adrian
8 Agosto, 2008 a 10:22
PHP realiza una conversión implícita de tipos en la comparación que en otros lenguajes no está soportada.
La “aparente” paradoja queda “destapada” si se hace una conversión utilizando moldes:
if ( (boolean) $a == true && (boolean) $b == false && (int) $a == $b )
{
echo ( ‘universe broken’ );
}
Salta a la vista que $a no “significa lo mismo” (boolean) $a.
Victor M. Varela
8 Agosto, 2008 a 10:38
Se me olvidó comentar que existe el operador === que sí realiza la comprobación de los tipos y para el cual, en el ejemplo anterior, la comparación $a === $b es falso.
Victor M. Varela
8 Agosto, 2008 a 10:40