Возможный дубликат:
Как различаются операторы сравнения равенства (== 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
.