Estaba trabajando en algún código de análisis de datos mientras me encontraba con lo siguiente.Comparación y conversión enteras de String PHP String
$line = "100 something is amazingly cool";
$key = 100;
var_dump($line == $key);
bien la mayoría de nosotros podría esperar que el vertedero para producir un false
, pero para mi sorpresa el vertedero fue un true
!
entiendo que en PHP no es el tipo de conversión de esa manera:
$x = 5 + "10 is a cool number"; // as documented on PHP manual
var_dump($x); // int(15) as documented.
Pero por qué una comparación como la forma en que he mencionado en el primer ejemplo se convierte mi cadena a entero en lugar de convertir el entero a cadena.
entiendo que se puede hacer una comparación estricta-===
a mi ejemplo, pero sólo quiero saber:
- ¿Hay alguna parte de la documentación de PHP mencionar en este comportamiento?
- ¿Alguien puede dar una explicación de por qué está sucediendo en PHP?
- ¿Cómo pueden los programadores evitar tal problema?
== Creo que hace una comparación numérica, y cuando la toma y la encadena y la convierte en un número si comienza con un número, usa ese número. Si probablemente no devuelve algo como NaN. – rubixibuc
La mayoría de nosotros esperaríamos esto ....al convertir una cadena en un número entero (como ocurre al comparar una cadena con un número), PHP se detiene en el primer dígito no numérico que encuentra, en este caso el espacio entre 100 (todos los dígitos) y "algo". SO 100 es el valor resultante. –
Ver http://stackoverflow.com/a/8672423 – Gumbo