为什么字符串“0e368798”和“00000000”相等,每个PHP的等式运算符?

时间:2013-12-25 07:41:28

标签: php equality

有人可以解释为什么以下两个语句都返回true?

if ('0e368798' == '00000000')

if ((string)'0e368798' == (string)'00000000')

为什么我必须使用strict运算符来检查这两个字符串的相等性?

1 个答案:

答案 0 :(得分:4)

因为XeYX * 10^(Y),而0次是00000000也是0。 PHP中的==非常直观地认为如果它可以转换为数字,那应该是。

编辑:这是一个有用的评论,现在已被删除,所以向评论者道歉,我的名字我没有抓到,我将在这里重复 - 来自PHP docs on comparison

  

如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于switch语句。当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值。