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

yipeiwu_com6年前PHP代码库
复制代码 代码如下:

$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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回

array_slice()定义和用法 array_slice() 函数在数组中根据条件取出一段值,并返回。 注释:如果数组有字符串键,所返回的数组将保留键名。(参见例子 4) 语法 ar...

php中获取远程客户端的真实ip地址的方法

(1).REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 (2).HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 (3).HTTP_CLIENT_I...

php多数据库支持的应用程序设计第1/2页

所以我想在主从数据库设计上,应该将所有会话相关表进行特殊对待。即:所有的会话数据表都可以更新和查询,当一个用户访问站点的时候,即将此用户绑定到指定数据库,所有会话访问和查询操作都对此数据...

解读PHP中的垃圾回收机制

解读PHP中的垃圾回收机制

PHP的基本GC概念 PHP语言同其他语言一样,具有垃圾回收机制。那么今天我们要为大家讲解的内容就是关于PHP垃圾回收机制的相关问题。希望对大家有所帮助。PHP strtotime应用经...

ThinkPHP跳转页success及error模板实例教程

本文以实例讲解了ThinkPHP跳转页面的success与error方法所对应的视图与控制器的实现方法,通过本实例教程可以帮助读者更好的掌握success方法与error方法的使用。 首...