使用==比较PHP中的不同字符串将返回true

时间:2013-01-10 13:34:52

标签: php string comparison string-comparison comparison-operators

我只是调试一个脚本,发现if语句没有像我预期的那样工作。

var_dump("6064365413078728979" == "6064365413078728452");
die();

上面的代码将产生以下结果:

bool(true)

使用===运算符可以按预期工作。有人有任何想法吗?

我正在使用PHP版本5.3.13和x64 windows机器上的wamp安装。

2 个答案:

答案 0 :(得分:7)

PHP具有松散的类型比较行为,因此在==非严格比较之前,您的数字字符串将转换为整数类型,并且转换结果会溢出。

这是在可能的情况下使用===的主要原因。

请查看this page以获取有关类型杂耍的更多详细信息。

答案 1 :(得分:3)

<?php
$a=6064365413078728979;
$b=6064365413078728452;
echo $a."<br>".$b;
//var_dump( $a==$b );
die();
?>

当你运行它时,然后在你的机器上可能超过一个数字的限制,这是一个数字比较发生。尝试上面的脚本,看看$ a的值可能与你给出的值不同。

这就是为什么当两者在数字上进行比较时它们是相等的。因此,按照其他人的建议使用 ===

编辑:基于@ Axel建议的解释。

PHP Manual解释

  

浮点数的大小取决于平台,但最大值为   ~1.8e308具有大约14个十进制数字的精度是常见的   值(64位IEEE格式)。

并且this website提供和解释溢出现象和一个小的PHP代码来测试你的系统的整数和浮点范围。了解服务器上的限制最有可能解释为什么会出现优惠流程