PHP的“替代语法”允许这个或者它是switch语句吗?

时间:2015-01-05 11:01:10

标签: php syntax switch-statement

我几天前在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';
}

这会返回ThreeFourFiveOtherhttp://codepad.org/37zvAPiW)。

请注意, PHP从未为此返回错误。 switch语句的逻辑是否允许我的代码在上面,或者是PHP" alternative syntax"?

3 个答案:

答案 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