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


Posted in PHP onOctober 21, 2009
$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 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
php之对抗Web扫描器的脚本技巧
Oct 01 PHP
php连接mysql数据库代码
Mar 10 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
php实现Linux服务器木马排查及加固功能
Dec 29 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
Thinkphp无限级分类代码
Nov 11 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
Smarty模板语法详解
Jul 20 PHP
php 3行代码的分页算法(求起始页和结束页)
Oct 21 #PHP
php实现mysql同步的实现方法
Oct 21 #PHP
php 魔术方法使用说明
Oct 20 #PHP
关于Appserv无法打开localhost问题的解决方法
Oct 16 #PHP
php foreach、while性能比较
Oct 15 #PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 #PHP
php 数学运算验证码实现代码
Oct 11 #PHP
You might like
php设计模式 State (状态模式)
2011/06/26 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
开启PHP的伪静态模式
2015/12/31 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
Python用threading实现多线程详解
2017/02/03 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
关于python字符串方法分类详解
2019/08/20 Python
Python 函数list&read&seek详解
2019/08/28 Python
Django 框架模型操作入门教程
2019/11/05 Python
Django 请求Request的具体使用方法
2019/11/11 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
戴森美国官网:Dyson美国
2016/09/11 全球购物
应届护士求职信范文
2014/01/26 职场文书
企业申诉管理制度
2014/01/30 职场文书
初中语文教学反思
2014/02/02 职场文书
安全教育感言
2014/03/04 职场文书
英语教师岗位职责
2014/03/16 职场文书
关于Python中*args和**kwargs的深入理解
2021/08/07 Python