PHP è stato progettato (o, piuttosto, evoluto) per l'uso con richieste Web, in cui hai spesso a che fare con l'input di stringhe (parametri URL o richieste POST da un modulo in un browser). Come tale, lancerà automaticamente le stringhe su altri tipi.
Un semplice esempio di ciò è che '1' + '2'
fornisce 3
, non un errore, o '12
', o qualche altra interpretazione. Secondo la stessa logica, la stringa '0'
può essere utilizzata come un numero 0
.
Nel frattempo, come molte altre lingue, PHP tratta alcuni valori come "falsi" quando espressi in booleani - quelli che sono intuitivamente "vuoti", come dici tu. Ciò include i valori numerici 0
, nonché la stringa vuota ''
e l'array vuoto []
. In una if
dichiarazione, l'espressione è esplicitamente lanciata su booleana, quindi if ( 0 )
è la stessa di if ( false )
.
Mettendo insieme queste due cose, ottieni un enigma: da un lato, come dici tu '0'
è una stringa non vuota; d'altra parte, abbiamo detto che può essere usato come un numero 0
, che è "vuoto". PHP sceglie di considerare la "nullità" più importante della "rigidità", quindi '0'
viene considerata "falsa".
In breve '0' == 0 == false
:; o(bool)'0' === (bool)(int)'0'