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'