Ошибки начинающих при работе с циклом while в PHP

Цикл while может выполняться бесконечно (это приведет к зависанию скрипта и страницы браузера), достаточно передать ему выражение, которое никогда не станет ложным. Например, так:

<?php $test = true; while ($test === true) { /* Написанный здесь код будет выполняться "вечно" (пока скрипт не будет остановлен принудительно). */ } ?>

Начинающие программисты время от времени загоняют свою программу в бесконечный цикл (с вами это тоже обязательно случится пару раз).

Давайте рассмотрим распространенные ошибки начинающих.

Ошибка 1

Пусть есть вот такой цикл, выводящий числа от 1 до 10:

<?php $i = 1; while ($i <= 10) { echo $i; $i++; } ?>

Представим теперь, что программист забыл сделать увеличение счетчика в цикле:

<?php $i = 1; while ($i <= 10) { echo $i; } ?>

В этом случае цикл будет выполнятся бесконечно, так как условие, при котором цикл закончится, никогда не будет достигнуто.

Ошибка 2

Пусть опять наш программист хотел выводить числа от 1 до 10, однако, вместо ++ написал --:

<?php $i = 1; while ($i <= 10) { echo $i; $i--; // перепутал ++ и -- } ?>

В этом случае, хотя счетчик и изменяется, но он изменяется не в ту сторону - и опять условие никогда не будет достигнуто.

Ошибка 3

Бывает и обратная проблема - можно так написать код, что условие цикла уже изначально будет неверно и цикл просто не запустится. Пусть, к примеру, программист хотел вывести столбец чисел от 1 до 10, однако, вместо знака меньше написал знак больше:

<?php $i = 1; while ($i > 10) { // правильно было написать $i < 10 echo $i; $i++; } ?>

В таком случае цикл просто не начнется, так как условие изначально неверно.

Ошибка 4

Бывает и так, что некоторым начинающим кажется, что цикл крутится не пока условие верно, а наоборот - цикл крутится пока условие не верно и остановится, когда оно станет верным.

Вот пример такого кода:

<?php $i = 1; while ($i == 10) { // зачем-то написано == echo $i; $i++; } ?>

При таком условии цикл вообще не начнется, так как условие просто изначально не верно.

Практические задачи

В следующем коде программист вывел числа от 10 до 1:

<?php $i = 10; while ($i >= 1) { echo $i; } ?>

В коде, однако, была допущена ошибка, которая привела к тому, что цикл выполняется бесконечно. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1:

<?php $i = 10; while ($i >= 1) { echo $i; $i++; } ?>

В коде, однако, была допущена ошибка, которая привела к тому, что цикл выполняется бесконечно. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1:

<?php $i = 10; while ($i <= 0) { echo $i; $i--; } ?>

В коде, однако, была допущена ошибка, которая привела к тому, что на экран ничего не вывелось. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1:

<?php $i = 10; while ($i == 0) { echo $i; $i--; } ?>

В коде, однако, была допущена ошибка, которая привела к тому, что на экран ничего не вывелось. Исправьте ошибку программиста.

В следующем коде программист вывел числа от 10 до 1:

<?php $i = 10; while ($i == 10) { echo $i; $i--; } ?>

В коде, однако, была допущена ошибка, которая привела к тому, что цикл вывел только число 10 и закончил свою работу. Исправьте ошибку программиста.