En PHP hay que tener cuidado al comparar dos valores cuando uno de ellos es una cadena. Para ver el problema he creado la función «comparar» donde vemos si un valor es igual a cero o no:
function comparar($valor)
{
echo mensaje($valor) . " -> " . comparacion($valor) . PHP_EOL;
}
function mensaje($valor)
{
return "$valor se convierte en " . (int) $valor . ", por lo tanto: ($valor == 0)";
}
function comparacion($valor)
{
return $valor == 0 ? 'true' : 'false';
}
comparar(123);
comparar('123');
comparar('123Z');
comparar('Z123');
Los resultados serán:
123 se convierte en 123, por lo tanto: (123 == 0) -> false 123 se convierte en 123, por lo tanto: (123 == 0) -> false 123Z se convierte en 123, por lo tanto: (123Z == 0) -> false Z123 se convierte en 0, por lo tanto: (Z123 == 0) -> true
Los tres primeros devuelven false porque el valor se puede convertir en un número distinto de cero. En el último caso es una cadena no convertible en número, por lo tanto se convierte en un cero.