不再谈 == 与 === 的区别了,地球人都知道。平时也很小心,当有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这个败家值存在的时候。否则,你有可能会郁闷哦。