首页 > PHP > 当switch/case条件遇到了数字0
2009十月21

当switch/case条件遇到了数字0

不再谈 == 与 === 的区别了,地球人都知道。平时也很小心,当有0的时候,当有空的时候,判断是否为false的时候,我都会使用===。可是,郁闷的事情还是发生了。

有一个接口返回的数值有,0,1,2,3,4,5。心里琢磨着,这不正是用switch和case的地方吗?于是不管三七二十一,写各种case条件,及default。心里琢磨着这程序员的生活是多么美好啊!

这是为监控合作方的接口返回值写的程序,可是第一天的时候就收到了短信报警。正常程序应该返回的是4,可是却返回了0。这咋能行?和合作方说了半天,无果。于是加上了日志。

幸运的是昨天再一次收到报警,心里还在高兴(这不是贱的吗?)。可是看日志文件一看,原来是系统超时,没有收到合作方返回的数据。咦?那返回的结果不就是“空”了吗?咋告诉我是0?心里一阵郁闷。

仔细看了一下程序,莫非是switch和case惹的祸?于是,写DEMO检测。

//输出结果为:bool(true) bool(false) xxx
var_dump(""==0);   
var_dump(""===0);

$errid = '';
switch ($errid) {
    case 0 :
        echo "xxx";
        break;
    default:
        echo "yyy";
}

真相大白了,原来 switch/case结构中,比较case值用的是==而不是===。这样,空就和0相等了,我收到的结果也当然就是错误的了。

没办法,程序不想改,毕竟多条件的时候switch/case要比一堆if让人看着舒心。想办法吧。呵呵。

$result = '';
if(is_numeric($err_id) === false) {  
$result .= '宕机或超时,没有返回值';
return $result;
}
switch ($err_id) {
    case xxx :
        ..........
}

问题解决了,先判断一下返回值是否是数值,如果不是数值的话,直接return。

以后写switch/case判断数字的时候一定要小心,尤其是有0这个败家值存在的时候。否则,你有可能会郁闷哦。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/10/21/1579/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

27 Responses to “当switch/case条件遇到了数字0”

  1. #1 waitwho 回复 | 引用 Post:2009-10-22 16:12

    强烈支持一下!

    [回复]

  2. #2 一天一歌 回复 | 引用 Post:2009-10-22 23:51

    @simaopig
    你是指1t1g@1t1g.com这个吧?
    上次试验腾讯的域名邮箱改动了MX,有空改回来呢 :razz:

    [回复]

  3. #3 天缘博客 回复 | 引用 Post:2009-10-26 20:36

    empty对0和”"判断也很有意思的,呵呵

    [回复]

  4. #4 北山 回复 | 引用 Post:2009-10-27 11:09

    空和0相等==啊,这个真不知道

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2009-10-27 11:21

    @天缘博客
    所以我基本不用empty这个函数。一般的情况下都是写 if($a === ”)之类的。。

    [回复]

  6. #6 simaopig 回复 | 引用 Post:2009-10-27 11:22

    @北山
    有些基础东西我记的不牢。。只能靠试。。唉。

    [回复]

  7. #7 Cherry 回复 | 引用 Post:2009-11-19 09:33

    switch/case,倒没有用到过这样的地方,平时都是用empty判断空和0,不过细节值得学习

    [回复]

评论分页

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)