整数字符串比较相等(PHP bug?)

use*_*939 7 php

我正在比较两个字符串:

<?php

$Str1 = '111122223333444455556666';
$Str2 = '111122223333444455557777';

if($Str1 != $Str2){
    // Do something
} else {
    // Do something else
}

?>
Run Code Online (Sandbox Code Playgroud)

显然,$ Str1与$ Str2不同,但仍然总是执行else-block.我知道我应该在这里使用===!==比较,但我想知道为什么(基本上)我尝试的任何其他值实际上评估它的预期方式.

我还在文档"如果字符串不包含任何字符'.','e'或'E'并且数值适合整数类型限制(由PHP_INT_MAX定义)中读到这个,字符串将是评估为一个整数.",所以我猜它不应低于或等于PHP_INT_MAX的值(这远远小于我上面评估的字符串) - 假设这是他们的意思"适合".那么为什么上面的字符串被评估为相同?它可能是一个PHP错误还是我缺少的东西?


我从昨天起使用PHP版本5.3.8,来自PHP 5.3.6.在Windows XP上运行.

Nik*_*kiC 7

这里发生的是数字被转换为浮点数(因为它们不适合整数)并且浮点数碰巧是相同的.请参阅PHP源代码.

此脚本显示已解析的浮点数确实具有相同的值.