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 相关文章推荐
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
php实现图片缩放功能类
Dec 18 PHP
php读取富文本的时p标签会出现红线是怎么回事
May 13 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
PHP new static 和 new self详解
Feb 19 PHP
Mac下php 5升级到php 7的步骤详解
Apr 26 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
php和vue配合使用技巧和方法
May 09 PHP
PHP dirname功能及原理实例解析
Oct 28 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 多行多列显示
2009/08/15 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
通过php添加xml文档内容的方法
2015/01/23 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
Python使用新浪微博API发送微博的例子
2014/04/10 Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
Python实现保证只能运行一个脚本实例
2015/06/24 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
大学生开西餐厅创业计划书
2014/02/01 职场文书
小学生感恩演讲稿
2014/04/25 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技