W3docs

do

Ключевое слово «do» в PHP запускает цикл do...while, который выполняет блок кода хотя бы один раз, затем проверяет условие.

Ключевое слово PHP do

Ключевое слово do запускает цикл do...while в PHP — управляющую конструкцию, которая многократно выполняет блок кода до тех пор, пока условие остаётся истинным. Его отличительная черта в том, что условие проверяется в конце цикла, поэтому тело цикла выполняется хотя бы один раз, даже если условие с самого начала ложно.

На этой странице рассматривается синтаксис do...while, отличия от обычного цикла while, практические ситуации, где этот цикл незаменим (валидация ввода, меню, логика повторных попыток), типичные ошибки и управление циклом с помощью break и continue.

Синтаксис

Ключевое слово do используется совместно с ключевым словом while. Сначала идёт тело цикла, затем условие:

Синтаксис do в PHP

<?php

do {
  // code to be executed
} while (condition);

Два важных момента:

  • Условие проверяется после каждого прохода, поэтому тело выполняется один раз до того, как оно будет проверено.
  • Закрывающий while (condition); должен заканчиваться точкой с запятой — в отличие от обычного цикла while, где точка с запятой создала бы ошибку.

do...while и while

Разница заключается в том, когда проверяется условие. Обычный цикл while проверяет условие перед первой итерацией, поэтому он может не выполниться ни разу. Цикл do...while проверяет после, поэтому выполняется хотя бы один раз.

<?php

$count = 10;

// while: condition false up front → body never runs
while ($count < 5) {
  echo "while: $count\n";
}

// do...while: body runs once before the check
do {
  echo "do: $count\n"; // prints "do: 10"
} while ($count < 5);

Вывод:

do: 10

Цикл while ничего не выводит; цикл do...while выводит одну строку. Используйте do...while в тех случаях, когда тело цикла должно выполниться хотя бы один раз независимо от начального состояния.

Примеры

Счётчик и перебор array — обратите внимание, что PHP_EOL (или "\n") добавляет перевод строки, поэтому каждое значение выводится на отдельной строке:

Примеры PHP do

<?php

// Example 1 — count from 1 to 5
$myNumber = 1;
do {
  echo $myNumber . PHP_EOL;
  $myNumber++;
} while ($myNumber <= 5);
// Prints 1, 2, 3, 4, 5 each on its own line

// Example 2 — walk through an array
$myArray = ["apple", "banana", "cherry", "date"];
$index = 0;
do {
  echo $myArray[$index] . PHP_EOL;
  $index++;
} while ($index < count($myArray));
// Prints apple, banana, cherry, date each on its own line

Когда использовать do...while

Гарантия «выполнится хотя бы один раз» делает do...while идеальным выбором для нескольких распространённых паттернов.

Логика повторных попыток и валидация

Выполните действие один раз, затем повторяйте попытки, пока оно не успешно:

<?php

$attempts = 0;
do {
  $attempts++;
  // Simulate: the 3rd attempt finally succeeds
  $password = $attempts < 3 ? "wrong" : "secret";
} while ($password !== "secret" && $attempts < 5);

echo "Logged in after $attempts attempts" . PHP_EOL;
// Logged in after 3 attempts

Поскольку первая попытка должна произойти всегда, do...while читается естественнее, чем цикл while с продублированным кодом настройки.

Циклы с меню

Отобразите меню, считайте ввод и повторяйте, пока пользователь не выберет выход — меню должно отображаться как минимум один раз:

<?php

$choice = '';
do {
  // show menu, read $choice from input...
  // for this example we just stop immediately
  $choice = 'q';
} while ($choice !== 'q');

echo "Goodbye\n";

Управление циклом: break и continue

Внутри тела do...while можно использовать break для досрочного выхода из цикла и continue для перехода к следующей проверке условия.

<?php

$n = 0;
do {
  $n++;
  if ($n === 3) {
    continue; // skip printing 3, jump to the while check
  }
  if ($n > 5) {
    break;    // exit the loop entirely
  }
  echo $n . PHP_EOL;
} while (true);
// Prints 1, 2, 4, 5

Обратите внимание, что continue переходит к проверке условия, а не к началу тела — цикл по-прежнему вычисляет while (true) и продолжает работу.

Типичные ошибки

  • Забытая точка с запятой после while (condition) приводит к ошибке синтаксического анализа.
  • Бесконечные циклы: если условие никогда не становится ложным (и нет break), цикл выполняется вечно. Убедитесь, что что-то внутри тела изменяет значения, от которых зависит условие.
  • Ошибка смещения при индексировании array: в do...while тело выполняется до проверки границ, поэтому пустой array может вызвать ошибку «undefined offset». Добавьте защиту с помощью if (!empty($arr)) или используйте foreach для работы с array.

Связанные циклы

PHP предлагает несколько конструкций цикла — выбирайте ту, которая соответствует вашей задаче:

  • while — проверка условия перед каждым проходом (может не выполниться ни разу).
  • for — цикл со счётчиком, имеющий встроенные инициализацию, условие и шаг.
  • foreach — прямой перебор array и объектов.
  • Обзор циклов PHP — сравнение всех четырёх конструкций.

Заключение

Цикл do...while является правильным инструментом всякий раз, когда блок кода должен выполниться хотя бы один раз, а затем повторяться при истинности условия — валидация ввода, логика повторных попыток и вывод меню являются классическими примерами. Не забывайте о завершающей точке с запятой, убедитесь, что условие может в конечном итоге стать ложным, и используйте break/continue для тонкой настройки потока выполнения.

Практика

Практика
Каково назначение цикла 'do-while' в PHP?
Каково назначение цикла 'do-while' в PHP?
Was this page helpful?