PHP-манипуляция, «String» == 0 и «String» == true

У меня очень простой вопрос. В PHP,

if ('abc' == 0){ //true } if ('abc' == 1){ //false } 

Я знаю, что эта страница говорит нам, что это должно быть так. Но я нахожу это странным. К тому же,

 if ('abc' == true){ //true } if ('abc' == false){ //false } 

Какова логика этих двух преобразований?

Конверсия 1

Когда производятся сравнения строк и целых чисел, сначала строка преобразуется в целое число, а затем выполняется сравнение. Поскольку в этих строках нет целых чисел, они преобразуются в нуль.

Конверсия 2

Любые непустые строковые значения являются логическими.

Из руководства :

 The following things are considered to be empty: "" (an empty string) 0 (0 as an integer) 0.0 (0 as a float) "0" (0 as a string) NULL FALSE array() (an empty array) $var; (a variable declared, but without a value) 

См. Также: Сравнение типов

Соответствующую таблицу можно найти здесь . Важно, какой тип обоих операндов будет основан на одном или обоих значениях.

В вашем первом случае приоритетными являются правила обеих сторон: «строка, ресурс или число» , а правило «Перевести строки и ресурсы на числа, обычную математику» .

Во втором примере используется правило «Преобразовать обе стороны в bool, FALSE <TRUE» .