PHP a été conçu (ou, plutôt, évolué) pour être utilisé avec les requêtes Web, où vous traitez fréquemment des entrées de chaîne (paramètres d'URL ou requêtes POST à partir d'un formulaire dans un navigateur). En tant que tel, il convertira automatiquement les chaînes en d'autres types.
Un exemple simple de ceci est que '1' + '2'
donne 3
, pas une erreur, ou '12
', ou une autre interprétation. Selon la même logique, la chaîne '0'
peut être utilisée sous forme numérique 0
.
Pendant ce temps, comme de nombreux langages, PHP traite certaines valeurs comme "fausses" lorsqu'elles sont converties en booléens - celles qui sont intuitivement "vides", comme vous le dites. Cela inclut le numérique 0
, ainsi que la chaîne vide ''
et le tableau vide []
. Dans une if
instruction, l'expression est explicitement convertie en booléen, elle if ( 0 )
est donc identique à if ( false )
.
En combinant ces deux choses, vous obtenez une énigme: d'une part, comme vous le dites, il '0'
s'agit d'une chaîne non vide; d'autre part, nous avons dit qu'il peut être utilisé comme un numérique 0
, qui est "vide". PHP choisit de traiter le "zéro-ness" comme plus important que la "stringence", de sorte que cela '0'
est considéré comme "faux".
En bref '0' == 0 == false
:; ou(bool)'0' === (bool)(int)'0'