PHP fue diseñado (o, más bien, evolucionado) para su uso con solicitudes web, donde se trata con frecuencia de entrada de cadena (parámetros de URL o solicitudes POST de un formulario en un navegador). Como tal, automáticamente lanzará cadenas a otros tipos.
Un ejemplo simple de esto es que '1' + '2'
da 3
, no un error, o '12
', o alguna otra interpretación. Por la misma lógica, la cadena '0'
se puede usar como un número 0
.
Mientras tanto, como muchos lenguajes, PHP trata ciertos valores como "falsos" cuando se convierten en booleanos, que son intuitivamente "vacíos", como usted dice. Eso incluye numérico 0
, así como la cadena vacía ''
y la matriz vacía []
. En una if
declaración, la expresión se convierte explícitamente en boolean, por lo que if ( 0 )
es lo mismo que if ( false )
.
Al unir estas dos cosas, se obtiene un enigma: por un lado, como usted dice '0'
es una cadena no vacía; Por otro lado, hemos dicho que puede usarse como un valor numérico 0
, que está "vacío". PHP opta por tratar el "cero-ness" como más importante que el "stringiness", por lo que '0'
se considera "falso".
En resumen: '0' == 0 == false
; o(bool)'0' === (bool)(int)'0'