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 json与xml序列化/反序列化

php json与xml序列化/反序列化

在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记...

PHP使用GETDATE获取当前日期时间作为一个关联数组的方法

本文实例讲述了PHP使用GETDATE获取当前日期时间作为一个关联数组的方法。分享给大家供大家参考。具体分析如下: PHP GETDATE函数是用来获得当前的日期和时间,从操作系统或一个...

phpmyadmin出现Cannot start session without errors问题解决方法

PHPMYADMIN出问题了,总一个劲报错。 复制代码 代码如下:Cannot start session without errors, please check errors giv...

WordPress中注册菜单与调用菜单的方法详解

register_nav_menus()(注册菜单) register_nav_menus() 函数用来注册一个菜单,菜单指的是 WordPress 3.0+ 的菜单管理器,注册之后用户...

PHP实现查询两个数组中不同元素的方法

本文实例讲述了PHP实现查询两个数组中不同元素的方法。分享给大家供大家参考,具体如下: <?php $a = array( "max_allow_dialogs...