Разница между перерывом и продолжением в случае переключения

Чем отличается

switch (variable) {
case 'value':
# code...
break;

case 'value':
# code...
break;
}

и этот

switch (variable) {
case 'value':
# code...
continue;

case 'value':
# code...
continue;
}

Это действительно другой результат или просто такой же?

3

Решение

Вот простой пример кода с обоими случаями переключения, упомянутыми выше

<?php
$variable = 20;
echo "Normal<br/>";
switch ($variable) {
case '20':
echo "twenty";
break;
case '21':
echo "twenty one";
break;
}

echo "<br/><br/>With Continue<br/>";
switch ($variable) {
case '20':
echo "twenty";
continue;
case '21':
echo "twenty one";
continue;
}
?>

Когда я выполняю приведенный выше код, я получаю следующий вывод

Normal
twenty

With Continue
twenty

Как?

Рабочая перерыв заявления

Перерыв заявление заставляет выполнение кода выходить из блока и выполнять следующие операторы, из-за чего оператор switch будет выполнять только один оператор case и выходить из блока switch без выполнения других блоков case.

Рабочая Продолжить заявление

Продолжить заявление в случае циклов это приведет к тому, что цикл прекратит выполнение текущей итерации цикла и перейдет к следующей итерации цикла (если таковая существует), но в случае оператора switch он рассматривается как оператор цикла, но никаких последующих итераций, вызывающих оператор switch, не происходит.

У нас может быть оператор switch без операторов break, как этот

<?php
$variable = 20;
echo "Normal";
switch ($variable) {
case '19':
echo "<br/>Nineteen";
case '20':
echo "<br/>twenty";
case '21':
echo "<br/>twenty one";
case '23':
echo "<br/>twenty three";
}
?>

Вывод вышеуказанного кода будет

Normal
twenty
twenty one
twenty three

то есть выполнение всех операторов case после случая, когда найдено первое совпадение.

0

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

В PHP два вышеуказанных кода работают одинаково. Здесь break а также continue Заявление о предотвращении контроля собирается в следующем case, Это continue действует так же, как break Вот. Также переключатель предназначен для выполнения только один раз. Это не петля. следовательно continue здесь не актуально.

Примечание: если есть цикл, заключающий это switch Заявление, то результат будет другим.

1

Это особый случай для PHP, потому что, как указано официальная документация:

Примечание. В PHP оператор switch считается циклической структурой.
для целей продолжения. продолжить ведет себя как перерыв (когда нет
аргументы пройдены). Если переключатель находится внутри петли, продолжить 2 будет
продолжить со следующей итерации внешнего цикла.

По сути, это означает, что между вашими двумя примерами нет никакой разницы. Однако для ясности я думаю, что было бы лучше использовать break как это стандарт на других языках. Обратите внимание, что вы можете использовать continue 2 (или 3, 4 …) для перехода к следующей итерации цикла, если переключатель находится внутри цикла (или более).

1