我有这段代码:
$test = 0;
if ($test == "on"){
echo "TRUE";
}
此代码的结果将是:
TRUE
WHY ???我的PHP版本:5.4.10。
答案 0 :(得分:4)
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于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
答案 1 :(得分:4)
因为您要将$test
与字符串值进行比较而不是二进制值,如果要与字符串值进行比较,请尝试使用===
比较,
value + dataType
。
在您的示例中,var_dump(0=="on");
始终返回bool(true)
。
但是当你使用var_dump(0==="on");
时,它会给你bool(false)
。
<强> Example from PHP Manual 强>
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
答案 2 :(得分:3)
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于switch语句。当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值。
所以使用“===”进行比较。
请参阅链接:http://php.net/manual/en/language.operators.comparison.php
答案 3 :(得分:0)
这是因为你正在做==
0
是整数,因此在此on
转换为int,即0
所以你的if语句看起来像0==0
对于解决方案,您必须使用===
if ($test === "on")
答案 4 :(得分:0)
在PHP中,整数和非数字字符串之间的松散比较(即不能解释为数字的字符串,例如&#34; php&#34;或者在您的情况下&#34; on&#34;)将导致字符串被解释为值为0的整数。注意数字&#34; 43&#34;,&#34; 1e3&#34;或&#34; 123&#34;是一个数字字符串,将被正确解释为数值。
我知道这很奇怪。