PHP - Разница между прерыванием и продолжением в случае переключения
В чем разница между
switch (variable) {
case 'value':
# code...
break;
case 'value':
# code...
break;
}
И этот
switch (variable) {
case 'value':
# code...
continue;
case 'value':
# code...
continue;
}
Это действительно другой результат или просто один и тот же?
3 answers
Вот простой пример кода с обоими упомянутыми выше случаями переключения
<?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
Как?
Работа оператора разрыва
Оператор Break заставляет выполнение кода выходить из блока и выполнять следующие операторы, из-за чего оператор switch выполнит только один оператор case и выйдет из блока switch без выполнения других блоков case.
Работа по продолжению заявление
Оператор Continue в случае циклов приведет к тому, что цикл остановит выполнение текущей итерации цикла и перейдет к следующей итерации цикла (если таковая существует), но в случае оператора 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 после случая, когда найдено первое совпадение.
В PHP два приведенных выше кода работают одинаково. Здесь операторы break
и continue
препятствуют переходу управления к следующему case
. То есть continue
действует точно так же, как break
здесь. Также переключатель предназначен для выполнения только один раз. Это не петля. Следовательно, continue
здесь не имеет значения.
Примечание: Если есть цикл, охватывающий это утверждение switch
, то результат будет другим.
Это особый случай для PHP, потому что, как указано в официальной документации :
Примечание: В PHP оператор switch считается циклической структурой для целей продолжения. продолжение ведет себя как перерыв (когда аргументы не передаются). Если переключатель находится внутри цикла, продолжение 2 будет продолжено со следующей итерацией внешнего цикла.
Таким образом, по сути, это означает, что между вашими двумя примерами нет реальной разницы. Однако для ясность Я думаю, что было бы лучше использовать break
, поскольку это стандарт на других языках. Обратите также внимание, что вы можете использовать continue 2
(или 3, 4...) для перехода к следующей итерации цикла, если переключатель находится внутри цикла (или более).