Я заметил, что вы действительно можете использовать continue
ключевое слово в выражении switch, но на PHP это не делает то, что я ожидал.
Если с PHP не получится, кто знает, на скольких других языках он тоже не работает? Если я часто переключаюсь между языками, это может быть проблемой, если код не ведет себя так, как я ожидал.
Должен ли я просто избегать использования 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
*/
К несчастью, continue
а также break
одинаковы в PHP
когда используешь switch
заявления.
Не позволяй PHP
испортить ваш опыт на других языках и продолжать использовать continue
где вам это нужно!
Попробуйте использовать continue 2
перейти к следующей итерации цикла, окружающего оператор switch.
РЕДАКТИРОВАТЬ:
$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!
Документация по PHP continue
заявление проясняет это:
Замечания: Обратите внимание, что в PHP оператор switch считается циклической структурой для Продолжить.
Вы должны знать, что разные языки дают одни и те же ключевые слова слегка различное значение, и не предполагайте, что PHP continue
ведет себя так же, как C ++ continue
,
Если continue
имеет смысл в PHP switch
где это не будет работать в C ++, используйте его.
Если continue
имеет смысл в C ++ switch
где это не будет работать в PHP, используйте его.
Важно отметить, что continue
а также break
не ведут себя так же, когда switch
Оператор вложен в цикл. Если вы используете switch
заявление, чтобы оценить что-то, и хотите перейти к следующему элементу в цикле, если условие выполнено, вы должны использовать continue 2
, С помощью break 2
в этом случае вырвется весь for
цикл, который не может быть желаемым действием.
Как предупреждается в Руководство по PHP:
«Обратите внимание, что в PHP оператор switch считается цикличной структурой для целей continue».
Таким образом, использование continue прервет оператор switch, а не цикл for. Опасности принятия аналогичного синтаксиса в разных языках.
В C и C ++ switch
Утверждение является лишь необычной комбинацией if/else if
и этикетки /goto
так что используя continue
внутри switch
хорошо. Но, как вы заметили, он не делает то, что вы ожидаете, на других языках, которые аналогичный на C или C ++. Это потому, что они похожи только в том, что касается синтаксиса, для семантических правил они очень разные звери. Таким образом, вещь, которая работает на одном языке, определенно не будет работать на другом, даже если языки выглядят одинаково.
Использование continue внутри C ++ switch / case
конструкция, которая встроена в цикл, совершенно нормально. Вы не должны ограничивать свой стиль в C ++ только из-за неправильного поведения в других языках программирования.