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

Ella ·
更新时间:2024-11-15
· 790 次阅读

代码如下:
$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 && 逻辑与运算符使用说明php中的三元运算符使用说明PHP学习 运算符与运算符优先级php下使用strpos需要注意 === 运算符用PHP中的 == 运算符进行字符串比较php foreach 使用&(与运算符)引用赋值要注意的问题PHP 作用域解析运算符(::)php合并数组array_merge函数运算符加号与的区别PHP三元运算符的结合性介绍PHP常用特殊运算符号和函数总结(php新手入门必看)php三元运算符知识汇总php 运算符与表达式详细介绍



运算符 比较运算符 PHP

需要 登录 后方可回复, 如果你还没有账号请 注册新账号