PHP字符串 ==比较运算符的副作用
作者:bea
代码如下: $a = '212345678912000005'; $b = '212345678912000001'; var_dump($a == $b); 这段代码的输出是bool(true), 说明这样判断会得出结论是两者相等. 类似的特性在in_array()函数第3个参数为false或者不设置的情况. 原因是首先判断字符串是否是数字, 然后转换成long或者double(C语言数据类型)再判断 - 使用zendi_smart_strcmp. 但是, 源
代码如下:
$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 批量删除数据的方法分析
- ThinkPHP php 框架学习笔记
- php pack与unpack 摸板字符字符含义
- php 显示指定路径下的图片
- dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
- PHP 简单日历实现代码
- php 网页游戏开发入门教程一(webgame+design)
- php 文件上传系统手记
- php后台程序与Javascript的两种交互方式
- PHP 数组教程 定义数组
- PHP 判断变量类型实现代码
- PHP 变量类型的强制转换
- PHP教程 预定义变量
- PHP 处理图片的类实现代码
- PHP教程 变量定义
- PHP教程 基本语法
- php self,$this,const,static,->的使用
- PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
- Wordpress php 分页代码