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

<div class="codetitle"><a style="CURSOR: pointer" data="66138" class="copybut" id="copybut66138" onclick="doCopy('code66138')"> 代码如下:

<div class="codebody" id="code66138">
$a = '212345678912000005';
$b = '212345678912000001';
var_dump($a == $b);

这段代码输出是bool(true),说明这样判断会得出结论是两者相等. 类似的特性在in_array()函数第3个参数为false或者不设置的情况. 原因是首先判断字符串是否是数字,然后转换成long或者double(C语言数据类型)再判断 - 使用zendi_smart_strcmp. 但是,源码中的注释说声明考虑了溢出的情况,
<div class="codetitle"><a style="CURSOR: pointer" data="57852" class="copybut" id="copybut57852" onclick="doCopy('code57852')"> 代码如下:
<div class="codebody" id="code57852">
} 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字符串

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...