有条件运算符的PHP Bug?

时间:2012-01-09 11:28:10

标签: php conditional

$i=0;
$j='00:15';

if ($i==$j)
    echo "equal";
else
    echo "not equal";

显示相等?

5 个答案:

答案 0 :(得分:6)

首先将

00:15转换为整数,然后与$i进行比较。由于intval()(执行转换)在第一个非数字字符处停止,因此00:15被转换为零,等于零。这里没有错误,这就是==运算符的工作方式。

如果您想避免投射,请改用===

答案 1 :(得分:2)

使用==类型将在比较之前进行转换。在这种情况下,两者都将转换为整数,当您将非数字字符串转换为整数时,它可能会导致0

如果您使用===运算符,则会得到您期望的结果。

答案 2 :(得分:1)

string和int比较为int,所以$j在这里转换为0,因为以00开头

答案 3 :(得分:0)

根本不奇怪 - 当比较字符串和整数时,第一个被转换为整数然后进行比较。使用===进行类型检查,您将看到实际结果

答案 4 :(得分:0)

原来===是有问题的

例如10 === 10如果一个是整数而一个是字符串则为false,即使它们与表单发布中的相同也是如此。

我使用的解决方案是:

if(“$ i”==“$ j”)

这样它只会检查它们是否相同而不管类型