-1

谁能弄清楚为什么在 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"(即设置为字符串),计算结果为假

这是一种已知的行为吗?我是否错过了有关此文档的内容?今天早些时候调试这个让我发疯了!

提前感谢您的帮助...

4

3 回答 3

4

这是由 PHP 使用的自动类型转换引起的。

当使用 just 将 int 值与字符串进行比较时==,字符串将被强制转换为 int,在您的情况下,这会导致 a0并因此产生true评估。

有关详细信息,请参阅相应的PHP 文档

为了避免这种情况,您可以使用===而不是==. 前者包括类型检查,这将使您的条件评估为假:

$value = 0;
$existing_value = "Unknown";

if ($value === $existing_value) {
    echo "$value === $existing_value";
} else {
    echo "$value !== $existing_value";
}
于 2013-10-31T09:04:04.903 回答
0

当您在 PHP 中将数字与字符串进行比较时,正如您在此处所做的那样,字符串将转换为数字。由于字符串 "Unknown" 不是数字,因此它被转换为数字0

如果您检查===运算符是否相等,它将不会执行类型转换,并且会评估为 false。

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

于 2013-10-31T09:04:08.317 回答
0

你应该看看PHP 中的比较表,尤其是松散比较(使用 ==)部分与严格比较(使用 ===)部分的比较。

在此处输入图像描述

于 2013-10-31T09:04:18.740 回答