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 ifinstruction, 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'