下面代码的输出是“失败”,但如果我们通过1 to $b as $b=1
,那么它将输出为“pass”。任何人都可以告诉我为什么这个条件只适用于0?
<?php
$a="abcd";
$b=0;
if($a == $b)
{
echo "fail";
}
else
{
echo "pass";
}
?>
答案 0 :(得分:1)
这是因为PHP type juggling和==
运算符。完整表格为here。
答案 1 :(得分:1)
因为您要比较不同类型的2个变量,所以将转换其中一个变量。在这种情况下,字符串将转换为整数,对于不以数字值开头的字符串,该整数将为0。
在PHP中使用"abc" == 0
,使用"abc" === 0
答案 2 :(得分:0)
你是类型杂耍的受害者。尝试使用identical comparison operator,===
,它还检查以确保变量的类型相同:
var_dump('abcd' === 0); // bool(false)
答案 3 :(得分:0)
来自PHP Manual:
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值。
if($a==$b) {
echo "fail";
}
else {
echo "pass";
}
这将输出fail
。
但是,如果您使用相同的比较运算符===
,则不会进行类型转换:
if($a===$b) {
echo "fail";
}
else {
echo "pass";
}
这将输出传递。
有关更多详细信息,请参阅PHP手册中的type juggling文档。