Лучшее объяснение, которое я могу придумать, заключается в том, что PHP считает это циклической структурой, поэтому она соответствует модели чего-то, что использует continue
и break
. Документация switch
не проливает свет на это больше, чем
Обратите внимание, что в отличие от некоторых других языков, оператор continue применяется к switch и действует аналогично break. Если у вас есть переключатель внутри цикла и вы хотите перейти к следующей итерации внешнего цикла, используйте продолжить 2.
Так что, возможно, это потому, что, как цикл, он останавливает выполнение остальной части кода в своей структуре.
Однако, когда вы используете несколько уровней, эти два ведут себя совершенно по-разному:
continue
без уровня
<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
continue;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1
//Finished with 2
//3
//Finished with 3
//4
//Finished with 4
continue
с уровнем
<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
continue 2;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1
//3
//Finished with 3
//4
//Finished with 4
break
без уровня
<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
break;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1
//Finished with 2
//3
//Finished with 3
//4
//Finished with 4
break
с уровнем
<?php
for($i=0;$i<5;$i++) {
switch($i) {
case 2:
break 2;
default:
echo $i, "\n";
}
echo "Finished with {$i}\n";
}
//0
//Finished with 0
//1
//Finished with 1