2009-08-11

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

Views: 14306 | Add Comments
$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).

Related posts:

  1. Zend Framework 的缓存模块 Zend_Cache 使用
  2. 史上最强大的PHP MySQL操作类
  3. 如何让 PHP json_encode 函数不转义中文?
  4. 史上最强大的PHP Web面试题(会做就能进百度)
  5. 用PHP去除重复图片文件
Posted by ideawu at 2009-08-11 14:15:37

Leave a Comment