PHP — Должен ли я когда-либо использовать continue внутри оператора switch?

Я заметил, что вы действительно можете использовать 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
*/

32

Решение

К несчастью, continue а также break одинаковы в PHP когда используешь switch заявления.

Не позволяй PHP испортить ваш опыт на других языках и продолжать использовать continue где вам это нужно!

32

Другие решения

Попробуйте использовать 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!

57

Документация по PHP continue заявление проясняет это:

Замечания: Обратите внимание, что в PHP оператор switch считается циклической структурой для Продолжить.

Вы должны знать, что разные языки дают одни и те же ключевые слова слегка различное значение, и не предполагайте, что PHP continue ведет себя так же, как C ++ continue,

Если continue имеет смысл в PHP switch где это не будет работать в C ++, используйте его.

Если continue имеет смысл в C ++ switch где это не будет работать в PHP, используйте его.

7

Важно отметить, что continue а также break не ведут себя так же, когда switch Оператор вложен в цикл. Если вы используете switch заявление, чтобы оценить что-то, и хотите перейти к следующему элементу в цикле, если условие выполнено, вы должны использовать continue 2, С помощью break 2 в этом случае вырвется весь for цикл, который не может быть желаемым действием.

1

Как предупреждается в Руководство по PHP:

«Обратите внимание, что в PHP оператор switch считается цикличной структурой для целей continue».

Таким образом, использование continue прервет оператор switch, а не цикл for. Опасности принятия аналогичного синтаксиса в разных языках.

0

В C и C ++ switch Утверждение является лишь необычной комбинацией if/else if и этикетки /gotoтак что используя continue внутри switch хорошо. Но, как вы заметили, он не делает то, что вы ожидаете, на других языках, которые аналогичный на C или C ++. Это потому, что они похожи только в том, что касается синтаксиса, для семантических правил они очень разные звери. Таким образом, вещь, которая работает на одном языке, определенно не будет работать на другом, даже если языки выглядят одинаково.

0

Использование continue внутри C ++ switch / case конструкция, которая встроена в цикл, совершенно нормально. Вы не должны ограничивать свой стиль в C ++ только из-за неправильного поведения в других языках программирования.

0
По вопросам рекламы [email protected]