switch遇到0的问题

你是否经常有switch来代替if else?是否因为使用了switch,提高代码的执行效率而庆幸?好吧,你和我一样,但也许你没有遇到下面的问题。
这个小程序,会输出什么呢?会是'00'么?

switch遇到0的纠结

 
结果必然不会是 00 啊,否则怎么会写这篇文章呢?它的执行结果是 11。具体原因是:
switch case 接收$a 来进行判断,当接收到的$a为true值时才会进行下面的判断,而$a=0;类似于一个false,所以他会寻找一个false的入口,第一个的判断是正确的,第二条的判断返回的是false,所以会以第二条语句为入口,执行第二条语句。
switch遇到0的纠结
返回的结果会是 11,直接执行第一case语句。
$a=0,switch判断后会认为是false,所以就跳过了第一个case语句,执行后面case语句。第二条后面有break语句,这就是为什么输出会是 11 了。但如果你这样进行判断,就会输出 00了。因为你指明了0时的入口case语句。
switch遇到0的纠结

同理下面的段代码的输出你应该就明白了吧。它的输出会是 '22'

 

欢迎大家拍砖!
posted @ 2017-04-06 19:26  2147483647  阅读(669)  评论(0编辑  收藏  举报