Кто-нибудь знает, почему в php
var_dump( "cat" == 0 );
Вычисляет истину? Также я понимаю:
var_dump( "cat" === 0 );
имеет намеченный результат, но любопытно, почему первый случай будет правдой. Также это php 5.3.
В руководстве PHP есть таблица сравнения типов, которая дает вам представление о том, что происходит при сравнении переменных двух разных типов данных.
Ваш первый пример («свободное» сравнение, поскольку он также не проверяет типы данных двух операндов) неявно преобразует строку слева в целое число. Так как он не начинается с числа, строка преобразуется в целое число 0, которое равно целому числу 0.
Второй пример сравнивает не только значения, но и типы. Так как тип отличается, сравнение ложно.
Строка неявно преобразуется в целое число. См. Документацию :
Если строка начинается с действительных числовых данных, это будет используемое значение. В противном случае значение будет равно 0 (ноль).
Поскольку вы неявно бросаете строку в целое число, и поскольку строка не содержит чисел, она отливается от 0
«cat» жонглирует до 0 как целое число, поэтому верно
но если вы набрали
var_dump( "01" == 0 );
это было бы неверно, потому что 1 не равно 0