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

本文通过一次实际案例,揭示了在PHP中使用switch/case结构时可能出现的问题,尤其是在比较0和空值时,由于默认使用==而非===进行比较,导致程序逻辑出现偏差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值