Почему целое число 0 равно строке в PHP?

Возможный дубликат:
Как различаются операторы сравнения равенства (== double equals) и идентичности (=== triple equals)?

Почему это

var_dump(0 == "string"); 

выводит это

 bool(true) 

Не является ли контекст оператора == преобразовывать 0 в FALSE и "string" в TRUE соответствии с этим набором правил ?

 var_dump(0 == "string"); 

выполняет числовое (целочисленное) сравнение

0 – целое число, поэтому «строка» преобразуется в целое число для сравнения и приравнивается к целочисленному значению 0, поэтому 0 == 0 истинно

Сравните сравнение с таблицами различных типов в документации PHP для получения подробных сведений.

Таблица, показанная здесь , более подходит для вашего случая.

Он показывает TRUE для сравнения 0 с "php" .

В рамках сравнения вы не конвертируете оба операнда в логическое, но один операнд будет преобразован в соответствие типу другого операнда. В вашем случае строка преобразуется в целое число, что приводит к другому 0 . Это дает 0 == 0 , что дает true.

Они не одного типа, используйте ===, если вы хотите проверить, являются ли они одного типа.

PHP: ==

Если вы сравниваете число со строкой или сравниваете числовые строки, то каждая строка преобразуется в число, а сравнение выполняется численно.

"string" не является числовым форматом, поэтому он будет преобразован в 0 .

во время сравнения строка преобразуется в целое число:

 var_dump(0); var_dump((int)"string"); var_dump(0 == "string"); 

последняя строка будет автоматически преобразована в:

 var_dump(0 == (int)"string"); 

так что это возвращение вернется:

 int(0) int(0) bool(true) bool(true) 

Сначала вы смотрите таблицу сравнения на этом сайте: http://php.net/manual/en/language.operators.comparison.php . Для нас это не относится.

 Operand 1 Operand 2 ... string, resource string, resource Translate strings and resources to numbers, or number or number usual math 

"string" отлитая от числа, равна 0 .