У меня есть этот код:Очень странное поведение в PHP
$test = 0;
if ($test == "on"){
echo "TRUE";
}
Результат этого кода будет:
TRUE
ПОЧЕМУ ??? Моя версия PHP: 5.4.10.
У меня есть этот код:Очень странное поведение в PHP
$test = 0;
if ($test == "on"){
echo "TRUE";
}
Результат этого кода будет:
TRUE
ПОЧЕМУ ??? Моя версия PHP: 5.4.10.
Если вы сравниваете число со строкой или сравниваете числовые строки, то каждая строка преобразуется в число и выполняется сравнение численно. Эти правила также применяются к оператору switch. Преобразование типа не происходит, когда сравнение === или! ==, поскольку это предполагает сравнение типа, а также значения.
$test = 0;
if ($test === "on"){
echo "TRUE";
}
PHP преобразует строку в число, чтобы сравнить. Используя ===
, будет сравниваться значение, а также тип данных.
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
Да. === отлично работает. Но 0! = "On", я так думаю :) – Weltkind
Это из-за конверсии. Проверьте обновления. –
Это происходит потому, что ваши делают ==
0
является целым числом, так в этом on
преобразуется в целое, которое является 0
Так ваш, если заявление выглядит 0==0
Для решения Вы для использования ===
if ($test === "on")
Поскольку вы сравниваете $test
со строковым значением, а не двоичным значением, если вы хотите сравнить со строковым значением, попробуйте сравнить ===
, для value + dataType
.
В вашем примере var_dump(0=="on");
всегда возвращает bool(true)
.
Но когда вы используете var_dump(0==="on");
, он даст вам bool(false)
.
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
Если сравнить число со строкой или сравнение включает в себя числовые строки, то каждая строка преобразуется в число, и сравнение выполняется численно. Эти правила также применяются к оператору switch. Преобразование типа не происходит, когда сравнение === или! ==, поскольку это предполагает сравнение типа, а также значения.
Для сравнения используйте «===».
см ссылки: http://php.net/manual/en/language.operators.comparison.php
В PHP, рыхлое сравнение между целым и нечисловой строкой (то есть строкой, которая не может быть интерпретирована как числовые, такими как «PHP», или в вашем случае «на») приведет к строка, которая будет интерпретирована как целое число со значением 0. Обратите внимание, что числовые «43», «1е3» или «123» являются числовой строкой и будут правильно интерпретироваться как числовое значение.
Я знаю, что это странно.
http://stackoverflow.com/questions/672040/comparing-string-to-integer-gives-strange-results – markdwhite
потому что '(int)" on "' равно '0' – Armen
@Armen на самом деле,' int 'из * ANY * string равно 0, поэтому всегда будет true, если сравнивать с 0. (try' intval ("anystringyouwanthere") ') – morcen