W3docs

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:

php— editable, runs on the server

Использование 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 разделяет варианты

Практика

Практика
Что делает оператор 'break' в PHP?
Что делает оператор 'break' в PHP?
Was this page helpful?