我几天前在PHP中编写了一个switch语句,它一次执行多个条件。直到我发现在其中一个条件之后我意外地写了default;
而不是break;
时,我无法弄清楚出了什么问题。
一旦switch语句找到匹配的大小写,它就会执行里面的代码以及跟在它后面的所有大小写的代码。
$number = 3;
switch($number){
case 1:
echo 'One';
default; // who needs break
case 2:
echo 'Two';
default;
case 3:
echo 'Three';
default;
case 4:
echo 'Four';
default;
case 5:
echo 'Five';
default;
default:
echo 'Other';
}
这会返回ThreeFourFiveOther
(http://codepad.org/37zvAPiW)。
请注意, PHP从未为此返回错误。 switch语句的逻辑是否允许我的代码在上面,或者是PHP" alternative syntax"?
答案 0 :(得分:3)
它的工作原理是因为PHP允许在;
语法中以:
使用分号switch
,例如。
switch($a) {
case 1; // semicolon
// foo
break;
}
与
相同switch($a) {
case 1:
// foo
break;
}
因此,从上面的角度来看,你很早就种下了default
而没有break
造成雪球效应。
答案 1 :(得分:0)
Default
只是正常命令,与“else”分支中的default
无关。
当case
未终止/中断break
命令时,也会执行另一个案例。在这种情况下,它与从default
中删除case
命令的情况相同,因为这些default
不执行任何操作。
switch($number){
case 1:
echo 'One';
case 2:
echo 'Two';
case 3:
echo 'Three';
case 4:
echo 'Four';
case 5:
echo 'Five';
default:
echo 'Other';
}
答案 2 :(得分:-1)
如果你使用break语句,它会起作用:http://codepad.org/mFjlaVxz