PHP був розроблений (а точніше, розвивався) для використання з веб-запитами, де ви часто маєте справу зі введенням рядків (параметри URL-адреси або POST-запити з форми у браузері). Таким чином, він автоматично передаватиме рядки для інших типів.
Простим прикладом цього є те, що '1' + '2'
дає 3
, а не помилку, або '12
', чи якусь іншу інтерпретацію. За тією ж логікою рядок '0'
можна використовувати як числовий 0
.
Тим часом, як і багато мов, PHP трактує певні значення як "хибні", коли вони передаються булевим - інтуїтивно зрозумілі, як ви кажете. Це включає числовий 0
, а також порожній рядок ''
і порожній масив []
. У if
висловлюванні вираз явно передається булевим, так if ( 0 )
само, як і if ( false )
.
Збираючи ці дві речі разом, ви отримуєте загадку: з одного боку, як ви кажете '0'
, це не порожня рядок; з іншого боку, ми говорили, що він може бути використаний як числовий 0
, який є "порожнім". PHP вирішує трактувати "нульову" як більш важливу, ніж "суворість", так що '0'
вважається "хибною".
Коротше кажучи '0' == 0 == false
:; або(bool)'0' === (bool)(int)'0'