当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP字符串 ==比较运算符的副作用

PHP
PHP4.03在linux下的安装
PHP4.04在win98下的安装
实例学习 PHP 之表单处理篇(一)
PHP4.04在英文win2000下的安装
PHP3 入门教程(极短篇)---什么是 PHP ?
PHP3 入门教程(极短篇)---初窥门径
PHP3 入门教程(极短篇)---INCLUDE 语句
PHP3 入门教程(极短篇)---HTML 表单和变量
PHP3 入门教程(极短篇)--MySQL 数据库界面-
PHP3 入门教程(极短篇)---要注意的地方
PHP3的MicrosoftSQL数据库函数
PHP中类的理解和应用[一]
PHP中类的理解和应用[二]
在服务器上安装、使用MySQL的注意事项
PHP+Apache在Win9X配置安装
把PHP4安装到Win2000的IIS5中
正则表达式使用详解(一)
正则表达式使用详解(二)
来个PHP计数器怎样?
用php实现广告轮播

PHP字符串 ==比较运算符的副作用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 107 ::
收藏到网摘: n/a

PHP字符串 ==比较运算符的副作用,大家可以参考下。
复制代码 代码如下:

$a = '212345678912000005';
$b = '212345678912000001';
var_dump($a == $b);

这段代码的输出是bool(true), 说明这样判断会得出结论是两者相等. 类似的特性在in_array()函数第3个参数为false或者不设置的情况. 原因是首先判断字符串是否是数字, 然后转换成long或者double(C语言数据类型)再判断 - 使用zendi_smart_strcmp. 但是, 源码中的注释说声明考虑了溢出的情况,
复制代码 代码如下:

} else if (dval1 == dval2 && !zend_finite(dval1)) {
/* Both values overflowed and have the same sign,
* so a numeric comparison would be inaccurate */
goto string_cmp;
}

dval1和dval2分别是两个字符串转换为double型后的值. 但为什么还是这样呢? 也许这个判断并不正确. 进一步研究再说...
解决方法, 使用三个等号"==="代替两个等号"==", in_array()函数设置第三个参数为true: in_array('val', $array, true). "