PHP字符串 ==比较运算符的副作用
更新时间:2009年10月21日 14:17:44 作者:
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).
相关文章
set_include_path和get_include_path使用及注意事项
set_include_path 设置默认包含路径,本文将介绍下其的使用方法,及注意事项,感兴趣的朋友可以了解下,或许对你学习php有所帮助2013-02-02
JS中encodeURIComponent函数用php解码的代码
在JS中使用了encodeURIComponent对中文进行编码在PHP中使用iconv('UTF-8','gb2312',$q);就可以得到你需要的字串了,其中gb2312根据你实际应用来定如还不明白为什么看下面的文章2012-03-03


最新评论