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 для тонкой настройки потока выполнения.