• 技术文章 >php教程 >php手册

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

    2016-06-13 12:21:05原创277
    复制代码 代码如下:


    $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).
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP 读取和修改大文件的某行内容的代码 下一篇:php后台程序与Javascript的两种交互方式
    PHP编程就业班

    相关文章推荐

    • Linux环境下如何使用PHP处理图像• 利用文件属性结合Session实现在线人数统计(Code)• oracle数据库导入导出命令!• META标签做搜索引擎优化的技巧• php正则匹配文章中的远程图片地址并下载图片至本地,

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网