任何人都可以弄清楚为什么会在PHP中发生这种情况(使用v5.4):
$value = 0;
$existing_value = "Unknown";
if ($value == $existing_value) {
echo "$value == $existing_value";
} else {
echo "$value != $existing_value";
}
输出为0 == Unknown
有趣的是,$value = "0"
(即设置为字符串),评估为假
这是一种已知行为吗?我在文档中遗漏了什么吗?调试这个让我今天早些时候疯了!
提前感谢您的帮助......
答案 0 :(得分:4)
这是由PHP使用的自动类型转换引起的。
将int值与仅使用==
的字符串进行比较时,字符串将被转换为int,在您的情况下会导致0
,因此评估为true
。
有关详细信息,请参阅相应的PHP documentation。
为了避免这种情况,您可以使用===
代替==
。前者包括类型检查,这将使您的条件评估为假:
$value = 0;
$existing_value = "Unknown";
if ($value === $existing_value) {
echo "$value === $existing_value";
} else {
echo "$value !== $existing_value";
}
答案 1 :(得分:0)
当您将数字与PHP中的字符串进行比较时,就像在此处一样,字符串将转换为数字。由于字符串“未知”不是数字,因此它将转换为数字0
。
如果检查与===
运算符是否相等,它将不执行类型转换,并且它将评估为false。
答案 2 :(得分:0)
与严格比较(使用===)部分相比,您应该查看comparison tables in PHP特别是松散比较(使用==)部分。