2011-08-30 12 views
5

Tuve una declaración if similar a la siguiente en mi código y me llevó mucho tiempo averiguar cuál era el problema.

$a = 0; 
if($a == 'something') 
{ 
//this was being output when I didn't want it to be 
} 

Usando

$a = '0'; 

arreglaron, pero no se sabe muy bien lo que está pasando aquí.

Respuesta

4

Una es una cadena, el número es un número entero. PHP se traducirá entre los dos, según sea necesario, a menos que estés usando los operadores 'estrictos':

(0 == '0') // true 
(0 === '0') // false (types don't match). 

En su caso, you'r comparar un número entero de 0 a una cadena 'algo'. PHP convertirá la cadena 'algo' en un entero. Si no hay dígitos allí, se convertirá a un número entero 0, lo que hace que su comparación sea cierta.

+0

¡Eso fue rápido, gracias! – Josh

2

Solo supongo, pero supongo que está intentando convertir la cadena en un número entero.

intval('something') espero devolverá 0.

0

hacer una comparación un valor numérico ($a = 0;) en una cadena. En este caso, la cadena se convierte en un número, y PHP emite cadenas en 0 si no hay un número al principio, por lo que es true.

En el otro caso, sin embargo, abordó dos cadenas, que son diferentes, por lo que es false.

Cuestiones relacionadas