Урок 15. PHP — Цикл Do while
На самом деле, как вы могли уже догадаться, цикл do while представляет собой слегка модифицированную версию цикла while, которую мы уже рассмотрели в прошлых уроках. Если вы вспомните, как работает обычный while, то вам будет проще понять новый цикл. Давайте повторим: тело цикла while выполняется, если условие верно и не выполняется, если не верно, но может и не выполниться ни разу, если условие будет с самого начала ложно. Как же работает do while?
Итак, новый цикл do выполняет свой блок кода, по крайней мере, один раз. Это потому, что здесь условный оператор находится после тела цикла! Таким образом, простой цикл while называют «циклом с предусловием», а цикл do while — «циклом с постусловием».
Пример сравнения синтаксиса двух циклов
Простой пример, который иллюстрирует разницу между этими двумя типами циклов и работы их условных операторов.
Работа цикла while:
$cookies = 0; while($cookies > 1){ echo "Мммм! Люблю печеньки! *ом-ном-ном*"; }
В результате мы не увидим ничего, так как переменная $cookies равна нулю и условие $cookies > 1 не сработает, следовательно цикл не выполнится. Теперь давайте сделаем то же самое, но с циклом do while:
$cookies = 0; do { echo "Мммм! Люблю печеньки! *ом-ном-ном*"; } while ($cookies > 1);
В результате:
Мммм! Люблю печеньки! *ом-ном-ном*
Как видите, цикл сработал один раз, а потом проверил условие, которое не выполнилось и вышел из цикла. Такие конструкции обязательно вам когда-нибудь пригодятся! Лучше помнить о них, чтобы не изобретать потом велосипед.
← Цикл Foreach | Содержание | POST & GET →
Комментарии:
Люблю php, темболее когда его разьясняет такой автор как ты): *Ом-ном-ном* Легко жевать!)
А разве выводом будет одна строка?
$cookies = 0;
do {
echo «Мммм! Люблю печеньки! *ом-ном-ном*»;
$cookies++;
} while ($cookies > 1);
Разве не так?
Stas, что ту разъяснять то? PHP практически ни чем не отличается от C, C++, C#, JAVA и т.д. Я имею ввиду на уровне уроков, которые на этом сайте. Тут автор просто показывает основные конструкции языка, школьники на Бейсике и Паскале поймут, если им код показать.
Михаил, условие не выполнилось и поэтому цикл дальше не бегает
// Опасный код, если $cookies будет больше нуля, весь цикл уйдет в рекурсию! Необходимо сделать декремент $cookies или ограничить значение $cookies : хотя так-же и есть компромисс который не изменяет значение $cookies и не ограничивает входящие данные
### ### ###
$cookies = 3;
echo ‘Переменная $cookies равна ‘, $cookies, »;
do {
if ($AnyBool == false) {$AnyInt = $cookies; $AnyBool = true;}
echo ‘Мммм! Люблю печеньки! *ом-ном-ном*’;
—$AnyInt;
echo » Осталось {$AnyInt} «;
if ($AnyInt == 0) {$AnyBool = false;} // Перезагрузить триггер
} while ($AnyInt > 0);
echo ‘Переменная $cookies все ещё равна ‘, $cookies, »;
### ### ###
// Последняя строчка цикла опциональна, она перезаряжает триггер $AnyBool, что позволяет использовать эту структуру ещё раз.
Вместо этой структуры [«;] должен был быть хэштег [br] для переноса текста на новую строку, но походу автоформатирование комментария его стела… увы( Код будет выдавать ошибку =(