我应该在switch语句中使用continue吗?

时间:2012-09-10 10:30:23

标签: php c++ language-agnostic switch-statement

我注意到你确实可以在switch语句中使用continue关键字,但在PHP上它并没有达到我的预期。

如果PHP失败了,谁知道它失败了多少其他语言呢?如果我在语言之间切换很多,如果代码的行为不像我预期的那样,这可能是一个问题。

我应该避免在switch语句中使用continue吗?

PHP(5.2.17)失败:

for($p = 0; $p < 8; $p++){
    switch($p){
        case 5:
            print"($p)";
            continue;
            print"*"; // just for testing...
        break;
        case 6:
            print"($p)";
            continue;
            print"*";
        break;
    }
    print"$p\r\n";
}
/*
Output:
0
1
2
3
4
(5)5
(6)6
7
*/

C ++似乎按预期工作(跳转到for循环结束):

for(int p = 0; p < 8; p++){
    switch(p){
        case 5:
            cout << "(" << p << ")";
            continue;
            cout << "*"; // just for testing...
        break;
        case 6:
            cout << "(" << p << ")";
            continue;
            cout << "*";
        break;
    }
    cout << p << "\r\n";
}
/*
Output:
0
1
2
3
4
(5)(6)7
*/

7 个答案:

答案 0 :(得分:65)

尝试使用continue 2继续循环语句周围循环的下一次迭代。

编辑:

    $foo = 'Hello';

    for ($p = 0; $p < 8; $p++) {
         switch($p) {
             case 3:
                 if ($foo === 'Hello') {
                     echo $foo;
                     break;
                 } else {
                      continue 2;
                 }

             default:
                 echo "Sleeping...<br>";
                 continue 2;

         }

         echo "World!";
         break;
    }

//This will print: Sleeping... Sleeping... Sleeping... Hello World!

答案 1 :(得分:35)

不幸的是,使用continue语句时,breakPHPswitch中是相同的。

不要让PHP破坏您在其他语言中的体验,并继续在您需要的地方使用continue

答案 2 :(得分:7)

The documentation for the PHP continue statement说明了这一点:

  

注意:请注意,在PHP中,出于 continue 的目的,switch语句被视为循环结构。

您应该知道不同的语言给出相同的关键字略有不同的含义,并且不要假设PHP continue与C ++ continue的行为相同。

如果continue在PHP switch中有意义,那么它在C ++中不起作用,请使用它。

如果continue在C ++ switch中有意义,它在PHP中不起作用,请使用它。

答案 3 :(得分:1)

值得注意的是,当continue语句嵌套在循环中时,breakswitch的行为不一样。如果您使用switch语句来评估某些内容,并且想要在满足条件的情况下转到循环中的下一个项目,则应使用continue 2。在这种情况下使用break 2将突破整个for循环,这可能不是所需的操作。

答案 4 :(得分:0)

正如PHP Manual中警告的那样:

“请注意,在PHP中,switch语句被认为是用于继续的循环结构。”

因此,使用continue将突破switch语句,而不是for循环。假设跨语言使用类似语法的危险。

答案 5 :(得分:0)

在嵌入循环的C ++ switch / case构造中使用continue是完全可以的。你不应该仅仅因为其他编程语言中出现不当行为而限制你在C ++中的风格。

答案 6 :(得分:0)

在C和C ++中,switch语句只是if/else if和标签/ goto的奇特组合,因此在continue中使用switch是可以的。但是正如您所注意到的那样,它在类似到C或C ++的其他语言中没有达到您的预期。那是因为它们在语法方面只是相似的,对于语义规则来说它们是非常不同的野兽。因此,即使语言看起来相似,用一种语言工作的东西绝对不会在另一种语言中起作用。