当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP字符串 ==比较运算符的副作用

PHP
php中如何避免sql注入攻击
半个汉字变问号,求解决办法
如何利用php来截取一段中文字符串而不出现乱码
php中文汉字替换与模式匹配的问题
如何生成静态html
提供一个最简单的购物车
如何用php作linux自动执行脚本?
phpsocket技术研究
PHP FRAMEWORK
如何将php作为shell脚本语言使用
用php实现pop3邮件的收取
浅析php中实现多线程
新身份证校验位算法
页面压缩gzip的运用
使cookie实现跨域名
PHP 验证码登陆校验
php中的面向对象和面向过程
php套接字编程
基于php的聊天室编程思想
实例学习php之投票程序

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 72 ::
收藏到网摘: n/a

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). "