我声明var $t
并为其指定值0.然后我将$t
重新分配给test
的新值。然后看来$t
同时是0
和test
。这是代码:
$t = 0;
$t = "test";
if($t == 0 && $t == "test"){
echo "unexpected";
}else{
echo "expected";
}
输出结果为:
"unexpected"
有人可以解释一下这里发生了什么吗? $t
实际上是两个不同的值(0
和test
),还是我错过了什么?
答案 0 :(得分:4)
由于PHP的类型杂耍,导致这种“奇怪”行为。由于您使用松散比较==
来比较整数0
,因此字符串test
将转换为整数,从而导致转换为0
。请参阅Loose comparison ==
表。在字符串php
的行中,您会看到它等于整数0
,它适用于所有字符串。
您应该使用严格(类型)比较运算符,即===
。
答案 1 :(得分:0)
你没有附加或连接,所以它不应该。请改为使用相同的比较运算符。
if($t === 0 && $t === "test"){
....
}
答案 2 :(得分:0)
PHP手册状态:
该值由>字符串的初始部分给出。如果字符串以有效的数字>数据开头,则这将是使用的值。否则,>值将为0(零)。有效数字数据是>可选符号,后跟一个或多个数字>(可选地包含小数点),>后跟可选指数。 >指数是' e'或者' E'后跟一个或多个数字。
http://il.php.net/manual/en/language.types.string.php#language.types.string.conversion
所以$t == 0
是真的。您必须使用严格比较===
答案 3 :(得分:0)
嘿伙计使用“===”运算符进行比较。
在php中我们可以为一个简单变量赋值,它包含数字,浮点数,字符,字符串等。
因此,请始终使用“===”运算符进行唯一或相同的值匹配。