break
Ключевое слово break в PHP завершает ближайший цикл или switch. Узнайте синтаксис, break N для вложенных циклов и отличие от continue.
Ключевое слово break в PHP
break — это управляющая конструкция, которая немедленно завершает ближайший цикл или switch. Выполнение продолжается с первой строки после этой структуры — все оставшиеся итерации пропускаются. Работает внутри for, foreach, while, do...while и switch.
break используется тогда, когда вы нашли то, что искали, или столкнулись с условием, при котором продолжение бессмысленно: подходящая запись в списке, неустранимая ошибка или обработанный вариант switch. Ранняя остановка экономит ресурсы и делает логику чище.
Эта страница охватывает синтаксис, все типы циклов, применение в switch, выход из вложенных циклов с помощью break N, а также отличие break от continue.
Синтаксис
<?php
while (condition) {
// code that runs each iteration
if (break_condition) {
break; // exit the loop right now
}
}
// execution continues here after breakКогда break_condition истинно, цикл завершается и начинает выполняться строка после закрывающей скобки. Условие необязательно — голый break; всегда завершает цикл, — но на практике его почти всегда оборачивают в if, иначе цикл выполнился бы лишь один раз.
Выход из цикла
Самый распространённый случай — остановить поиск, как только найден ответ. После того как значение найдено, нет смысла просматривать остаток array.
<?php
$haystack = [10, 22, 35, 47, 58];
$target = 35;
$found = false;
foreach ($haystack as $index => $value) {
if ($value === $target) {
$found = true;
echo "Found $target at index $index\n";
break; // stop — no need to check the rest
}
}
if (!$found) {
echo "Not found\n";
}
// Output: Found 35 at index 2Тот же подход работает и с другими типами циклов. Здесь break завершает цикл while (true) — намеренно бесконечный цикл, единственный выход из которого — break:
Использование break в switch
Внутри оператора switch именно break предотвращает «проваливание» выполнения в следующий вариант. Без него PHP продолжает выполнять код вариантов, расположенных ниже совпавшего.
<?php
$role = "editor";
switch ($role) {
case "admin":
echo "Full access";
break;
case "editor":
echo "Can edit content";
break; // without this, "Read-only" would also run
default:
echo "Read-only";
}
// Output: Can edit contentВыход из вложенных циклов с помощью break N
По умолчанию break завершает только самый внутренний цикл. Чтобы выйти сразу из нескольких уровней, передайте число: break 2; выходит из двух вложенных структур, break 3; — из трёх, и так далее.
<?php
for ($i = 1; $i <= 3; $i++) {
foreach (['a', 'b', 'c'] as $letter) {
if ($letter === 'b') {
break 2; // exit BOTH the foreach and the for
}
echo "$i-$letter\n";
}
}
echo "Done\n";
// Output:
// 1-a
// DoneПростой break; здесь завершил бы только внутренний foreach, и внешний for начал бы следующую итерацию. break 2; завершает оба цикла, поэтому выполнение переходит прямо к echo "Done";.
Примечание: Число после
breakдолжно быть литералом —break $level;является фатальной ошибкой начиная с PHP 5.4. Если нужна такая гибкость, реструктурируйте циклы или вынесите их в функцию и используйтеreturn.
break и continue
Эти две конструкции легко перепутать:
breakполностью останавливает цикл и переходит к коду после него.continueпропускает только остаток текущей итерации и переходит к следующей — цикл продолжается.
Смотрите break и continue для сравнения двух конструкций.
Распространённые ошибки
- Забытый
breakвswitchприводит к нежелательному проваливанию, и выполняется несколько вариантов. Иногда это сделано намеренно (группировка вариантов), но чаще это баг. breakработает только в циклах иswitch— нельзя использовать его для выхода из блокаifили функции. Для выхода из функции используйтеreturn.- Подсчёт уровней для
break Nхрупок: если впоследствии обернуть код ещё в один цикл, число окажется неверным. Старайтесь не злоупотреблять вложенностью.
Связанные темы
- continue — перейти к следующей итерации вместо остановки
- for loop и while loop
- foreach loop — итерация по array
- switch — где
breakразделяет варианты