PHP中奇怪的逻辑行为 - 这是正常的吗?

时间:2013-10-31 09:00:37

标签: php logic

任何人都可以弄清楚为什么会在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"(即设置为字符串),评估为假

这是一种已知行为吗?我在文档中遗漏了什么吗?调试这个让我今天早些时候疯了!

提前感谢您的帮助......

3 个答案:

答案 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。

http://php.net/manual/en/language.operators.comparison.php

答案 2 :(得分:0)

与严格比较(使用===)部分相比,您应该查看comparison tables in PHP特别是松散比较(使用==)部分。

enter image description here