我注意到你确实可以在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
*/
答案 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
语句时,break
和PHP
在switch
中是相同的。
不要让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
语句嵌套在循环中时,break
和switch
的行为不一样。如果您使用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 ++的其他语言中没有达到您的预期。那是因为它们在语法方面只是相似的,对于语义规则来说它们是非常不同的野兽。因此,即使语言看起来相似,用一种语言工作的东西绝对不会在另一种语言中起作用。