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 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
php.ini修改php上传文件大小限制的方法详解
Jun 17 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
PHP对象的浅复制与深复制的实例详解
Oct 26 PHP
如何优雅的使用 laravel 的 validator验证方法
Nov 11 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设置编码格式的方法
2013/03/05 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
php格式化json函数示例代码
2016/05/12 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
python实现指定字符串补全空格的方法
2015/04/30 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python3如何判断三角形的类型
2020/04/12 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
AC Lens:购买隐形眼镜
2017/02/26 全球购物
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
初中班主任评语大全
2014/04/24 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
python实现会员管理系统
2022/03/18 Python