找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1943|回复: 0

[教程] PHP字符串==比较的副作用

[复制链接]
发表于 2013-4-10 10:12:50 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
$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).

评分

参与人数 1金币 +1 收起 理由
猫性男孩 + 1 很给力!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-1 20:34 , Processed in 0.052966 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表