带有条件运算符的PHP错误?

带有条件运算符的PHP错误?,php,conditional,Php,Conditional,显示相等?00:15首先转换为整数,然后与$i进行比较。由于intval()(进行转换的)在第一个非数字字符处停止,00:15被转换为零,等于零。这里没有bug,这就是=操作符的工作方式 如果要避免强制转换,请改用==。使用=将在比较类型之前转换类型。在这种情况下,两者都将转换为整数,当您将非数字字符串转换为整数时,可能会导致0 如果您使用==操作符,您将得到预期的结果。字符串和int比较为int,因此$j在这里转换为0,因为以00开头一点也不奇怪-在将字符串与整数比较时,第一个字符串被转换为整

显示相等?

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


如果要避免强制转换,请改用
==

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


如果您使用
==
操作符,您将得到预期的结果。

字符串和int比较为int,因此
$j
在这里转换为0,因为以00开头一点也不奇怪-在将字符串与整数比较时,第一个字符串被转换为整数,然后进行比较。使用
==
进行类型检查,您将看到实际结果

证明===有问题

例如,如果一个是整数,一个是字符串,则10===10将为false,即使它们与表单过帐中可能发生的情况相同

我使用的解决方案是:

如果(“$i”==“$j”)


通过这种方式,它只检查它们是否相同,而不考虑类型

user
if($i===$j)
而不是
if($i==$j)
,这表明了对PHP等式运算符的误解检查两个操作数是否相等;10==“10”将返回真值检查两个操作数是否相等且类型相同,因此10==“10”将返回false,但10==“10”将返回true。没有必要在你的“解决方案”中用双引号将两者都括起来。我也这么认为。但是遇到了一个错误。其中x==y给出了false。在添加了引号之后,它工作了。我不认为这是一个bug,这是由于PHP隐式地转换了变量。如果在命令行上运行:
php-r“var_dump((int)'00:15');”
字符串00:15被强制转换为int(0),然后将0与0进行比较。将尝试重现该问题。已经好几天了。很奇怪。我记得这两种字符串表示形式都打印为“10”,但出于某些原因,如果我使用它给出的==运算符,则返回false。添加引号修复了这些问题。
$i=0;
$j='00:15';

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