У меня очень простой вопрос. В 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» .