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

yipeiwu_com7年前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 adodb连接带密码access数据库实例,测试成功

<?     include('./class/adodb/adodb.inc.php');    ...

PHP基于Redis消息队列实现发布微博的方法

PHP基于Redis消息队列实现发布微博的方法

本文实例讲述了PHP基于Redis消息队列实现发布微博的方法。分享给大家供大家参考,具体如下: phpRedisAdmin :github地址  图形化管理界面 git c...

PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍

在访问PHP类中的成员变量或方法时,如果被引用的变量或者方法被声明成const(定义常量)或者static(声明静态),那么就必须使用操作符::,反之如果被引用的变量或者方法没有被声明成...

PHP中iconv函数转码时截断字符问题的解决方法

iconv是转换编码的,但是在中文转码时候出现显示不全问题。  复制代码 代码如下:  iconv("UTF-8","GB2312//IGNORE",$data)...

Win下如何安装PHP的APC拓展

Win下如何安装PHP的APC拓展

APC简介APC(Alternative PHP Cache)是一个PHP缓存。它在内存中存储PHP页面并且减少了硬盘的I/O。这对于性能的提升十分明显。你甚至可以在CPU使用率下降50...