Continue 2 и break in switch statement
Я новичок в PHP и вижу код ниже в Интернете. Он имеет continue 2
и break
вместе в инструкции switch/case
. Что это значит?
foreach ( $elements as &$element ) {
switch ($element['type']) {
case a :
if (condition1)
continue 2;
break;
case b :
if (condition2)
continue 2;
break;
}
// remaining code here, inside loop but outside switch statement
}
Ответы
Ответ 1
continue 2
пропускает непосредственно к следующей итерации структуры, которая находится на двух уровнях назад, которая является foreach
. break
(эквивалентный break 1
) просто завершает оператор switch
.
Поведение в коде, который вы показали:
Цикл по $elements
. Если $element
имеет тип "a" и condition1
выполнено или если он имеет тип "b" и condition2
выполнено, перейдите к следующему $element
. В противном случае выполните некоторое действие, прежде чем переходить к следующему $element
.
С PHP.net: продолжение:
continue принимает необязательный числовой аргумент, который сообщает, сколько уровней замкнутых циклов следует пропустить до конца. Значение по умолчанию равно 1, что позволяет перейти к концу текущего цикла.
С PHP.net:switch
PHP продолжает выполнять операторы до конца блока switch или до того момента, когда он впервые увидит оператор break.
Если у вас есть переключатель внутри цикла и вы хотите перейти к следующей итерации внешнего цикла, используйте продолжить 2.
Ответ 2
IMHO, разница в том, что у вас есть код после коммутатора и до конца цикла.
foreach ( $elements as &$element ) {
switch ($element['type']) {
case a :
if (condition1)
continue 2;
break;
case b :
if (condition2)
continue 2;
break;
}
// The code here will be reached if break but not if continue 2
}
Ответ 3
continue принимает необязательный числовой аргумент, который сообщает ему, сколько уровней замкнутых циклов он должен пропустить до конца. Значение по умолчанию равно 1, таким образом пропуская до конца текущего цикла.
Источник: http://php.net/manual/en/control-structures.continue.php
Ответ 4
continue и break аналогичны тем, что перестают что-то происходить.
в случае продолжения, он остановит что-нибудь после брекетов, но не остановит цикл. Оператор switch просто выходит из этого утверждения и переходит к следующему утверждению.
В случае разрыва он остановит весь цикл от продолжения, завершите цикл.