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'