zoukankan      html  css  js  c++  java
  • php的if判断出现的问题思考

    问题

    工作中有一个“大神”写的代码,其中出现了这么一幕,不看答案,你知道结果是什么吗?

    <?php
    
    function testIf($if){
        
        if($if == "on" || $if == 1){
           return true;
        }
        
        return false;
    }
    
    $if = 0;
    var_dump(testIf($if));//运行结果:true
    
    

    为什么执行结果是 true???$if这个变量既不是["on"],也不是[1],怎么就能够进这个判断里面去呢???

    测试

    在判断进行到 [if($if == "on"...] 的时候,他们其实是这样执行的

     if($if == (int)"on" || $if == 1)
    

    因为php是弱类型语言,所以在比较一个整型和一个字符串的时候,执行时候会帮你强转,
    字符串["on"]被强转后就是[0],也就等于[$if]了,所以bug就来了。。。我们的本意就是要判断他们不相等从而跳出去的,所以要达到目的,应该使用全等号。代码应该改为:

    function testIf($if){
        
        if($if === "on" || $if === 1){
           return true;
        }
        
        return false;
    }
    

    建议

    因为php是弱类型语言,带来方便的同时也容易出现各种各样预料之外的问题,所以我们在编码上应该避免这种类似的问题.$color{#FF0000}{判断或传值的时候,尽量让相同类型的数据在一起,不同类型不要放在一起}$

  • 相关阅读:
    poj 3621(最优比率环)
    bzoj 1497(最大权闭合子图)
    Dinic(模板 再错是不可能的 这辈子都不可能了)
    BZOJ 2038
    zoj 3822(概率dp)
    poj 3683(2-sat+拓扑排序)
    poj 2186(tarjan+缩点)
    hdu 5782(kmp+hash)
    hdu 6035(树形dp)
    Python爬取房屋租售信息
  • 原文地址:https://www.cnblogs.com/xuduan/p/14509215.html
Copyright © 2011-2022 走看看