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

 更新时间:2009年10月21日 14:17:44   转载 作者:  
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).

相关文章

  • PHP+redis实现微博的推模型案例分析

    PHP+redis实现微博的推模型案例分析

    这篇文章主要介绍了PHP+redis实现微博的推模型案例,结合实例形式分析了php+redis实现微博推送与关注功能相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • php常用数组函数实例小结

    php常用数组函数实例小结

    这篇文章主要介绍了php常用数组函数,结合实例形式总结分析了php常用数组函数array_merge、array_slice及array_map的功能与使用技巧,需要的朋友可以参考下
    2016-12-12
  • PHP日期函数date格式化UNIX时间的方法

    PHP日期函数date格式化UNIX时间的方法

    这篇文章主要介绍了PHP日期函数date格式化UNIX时间的方法,实例分析了php中date函数的使用技巧,需要的朋友可以参考下
    2015-03-03
  • php中用foreach来操作数组的代码

    php中用foreach来操作数组的代码

    php中用foreach来操作数组的代码,需要的朋友可以参考下。
    2011-07-07
  • 继续收藏一些PHP常用函数

    继续收藏一些PHP常用函数

    方便以后制作php程序,直接拿来就可以用了,其实一些好的函数都在一些较成熟的cms系统中都有,例如dedecms,帝国cms,phpcms等,不论是gb2312的还是utf8格式的都有。
    2008-08-08
  • PHP转换IP地址到真实地址的方法详解

    PHP转换IP地址到真实地址的方法详解

    本篇文章是对PHP转换IP地址到真实地址的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Linux下php5.4启动脚本

    Linux下php5.4启动脚本

    这篇文章主要介绍了Linux下php5.4启动脚本,需要的朋友可以参考下
    2014-08-08
  • php实现的网页版剪刀石头布游戏示例

    php实现的网页版剪刀石头布游戏示例

    这篇文章主要介绍了php实现的网页版剪刀石头布游戏,涉及php数组遍历、比较及随机数组调用相关操作技巧,需要的朋友可以参考下
    2016-11-11
  • php简单实现sql防注入的方法

    php简单实现sql防注入的方法

    这篇文章主要介绍了php简单实现sql防注入的方法,涉及addslashes函数的使用及正则过滤的相关技巧,非常简单实用,需要的朋友可以参考下
    2016-04-04
  • php错误级别的设置方法

    php错误级别的设置方法

    PHP在运行时, 针对严重程度不同的错误,会给以不同的提示,这里简单介绍下, 方便需要的朋友
    2013-06-06

最新评论