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 相关文章推荐
ADODB类使用
Nov 25 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
在smarty中调用php内置函数的方法
Feb 07 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
Jun 09 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
Yii rules常用规则示例
2016/03/15 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
JS抛物线动画实例制作
2018/02/24 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
汽车队司机先进事迹材料
2014/02/01 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
春节联欢会主持词
2014/03/24 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js