当switch/case条件遇到了数字0
不再谈 == 与 === 的区别了,地球人都知道。平时也很小心,当有0的时候,当有空的时候,判断是否为false的时候,我都会使用===。可是,郁闷的事情还是发生了。
有一个接口返回的数值有,0,1,2,3,4,5。心里琢磨着,这不正是用switch和case的地方吗?于是不管三七二十一,写各种case条件,及default。心里琢磨着这程序员的生活是多么美好啊!
这是为监控合作方的接口返回值写的程序,可是第一天的时候就收到了短信报警。正常程序应该返回的是4,可是却返回了0。这咋能行?和合作方说了半天,无果。于是加上了日志。
幸运的是昨天再一次收到报警,心里还在高兴(这不是贱的吗?)。可是看日志文件一看,原来是系统超时,没有收到合作方返回的数据。咦?那返回的结果不就是“空”了吗?咋告诉我是0?心里一阵郁闷。
仔细看了一下程序,莫非是switch和case惹的祸?于是,写DEMO检测。
var_dump(""==0);
var_dump(""===0);
$errid = '';
switch ($errid) {
case 0 :
echo "xxx";
break;
default:
echo "yyy";
}
真相大白了,原来 switch/case结构中,比较case值用的是==而不是===。这样,空就和0相等了,我收到的结果也当然就是错误的了。
没办法,程序不想改,毕竟多条件的时候switch/case要比一堆if让人看着舒心。想办法吧。呵呵。
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/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
强烈支持一下!
[回复]
@simaopig
你是指1t1g@1t1g.com这个吧?
上次试验腾讯的域名邮箱改动了MX,有空改回来呢 :razz:
[回复]
empty对0和”"判断也很有意思的,呵呵
[回复]
空和0相等==啊,这个真不知道
[回复]
@天缘博客
所以我基本不用empty这个函数。一般的情况下都是写 if($a === ”)之类的。。
[回复]
@北山
有些基础东西我记的不牢。。只能靠试。。唉。
[回复]
switch/case,倒没有用到过这样的地方,平时都是用empty判断空和0,不过细节值得学习
[回复]