Урок 10

Урок 10. Циклы

На данном уроке мы рассмотрим:

  1. Цикл while

  2. Цикл do-while

  3. Цикл for

Цикл while

Циклы while являются простейшим видом циклов в PHP. Простейшей формой цикла while является следующее выражение:

while (выражение)

оператор;

Смысл выражения while очень прост. Оно указывает PHP выполнять вложенные выражения повторно до тех пор, пока выражение в самом while является TRUE. Значение выражения проверяется каждый раз перед началом цикла, поэтому даже если значение выражения изменится в процессе выполнения вложенных выражений в цикле, выполнение не прекратится до конца итерации (каждый раз, когда PHP выполняет выражения в цикле - это одна итерация). В том случае, если выражение while равно FALSE с самого начала, вложенные выражения ни разу не будут выполнены. Также, как и с оператором if, вы можете группировать несколько выражений внутри одного цикла while, заключая эти выражения между фигурными скобками или используя альтернативный синтаксис:

while (выражение):

оператор

...

endwhile;

Следующие примеры идентичны, и оба выведут числа от 1 до 10:

Пример 1.

$i = 1;

while ($i <= 10) {

echo $i++; /* выводится будет значение переменной

$i перед её увеличением

(post-increment) */

}

Пример 2.

$i = 1;

while ($i <= 10):

echo $i;

$i++;

endwhile;

?>

Цикл do-while

Цикл do-while очень похож на цикл while, с тем отличием, что истинность выражения проверяется в конце итерации, а не в начале. Главное отличие от обычного цикла while в том, что первая итерация цикла do-while гарантированно выполнится (истинность выражения проверяется в конце итерации), тогда как она может не выполниться в обычном цикле while (истинность выражения которого проверяется в начале выполнения каждой итерации, и если изначально имеет значение FALSE, то выполнение цикла будет прервано сразу). Есть только один вариант синтаксиса цикла do-while:

$i = 0;

do {

echo $i;

} while ($i > 0);

В примере цикл будет выполнен ровно один раз, так как после первой итерации, когда проверяется истинность выражения, она будет вычислена как FALSE ($i не больше 0) и выполнение цикла прекратится. Опытные пользователи могут быть знакомы с другим использованием цикла do-while, которое позволяет остановить выполнение хода программы в середине блока, для этого нужно обернуть нужный блок кода вызовом do-while и использовать break. Следующий фрагмент кода демонстрирует этот подход:

do {

if ($i < 5) {

echo "i еще недостаточно велико";

break;

}

$i *= $factor;

if ($i < $minimum) {

break;

}

echo "значение i уже подходит";

/* обработка i */

} while (0);

Цикл for

Цикл for самый сложный цикл в PHP. Синтаксис цикла for следующий:

for (выраж1; выраж2; выраж3)

оператор;

Первое выражение (выраж1) всегда вычисляется (выполняется) только один раз в начале цикла. В начале каждой итерации оценивается выражение выраж2. Если оно принимает значение TRUE, то цикл продолжается, и вложенные операторы будут выполнены. Если оно принимает значение FALSE, выполнение цикла заканчивается. В конце каждой итерации выражение выраж3 вычисляется (выполняется). Каждое из выражений может быть пустым или содержать несколько выражений, разделенных запятыми. В выраж2 все выражения, разделенные запятыми, вычисляются, но результат берется из последнего. Если выражение выраж2 отсутствует, это означает, что цикл будет выполняться бесконечно. (PHP неявно воспринимает это значение как TRUE). Это может быть не столь бесполезно, сколь вы могли подумать, так как часто необходимо прервать цикл, используя условный оператор break вместо использования выражения в цикле for, которое принимает истинное значение. Рассмотрим следующие примеры. Все из них отображают числа от 1 до 20:

Пример 1.

for ($i = 1; $i <= 20; $i++) {

echo $i;

}

Пример 2.

for ($i = 1; ; $i++) {

if ($i > 20) {

break;

}

echo $i;

}

PHP также поддерживает альтернативный синтаксис с двоеточием для циклов for.

for (выраж1; выраж2; выраж3):

оператор;

...

endfor.

Вопросы и задания!

  1. Какие циклы существуют на языке PHP? Сравните их с циклами на других языках программирования.

  2. Посчитать сумму и произведение цифр от 1 до 30. Написать 3 программы с использованием всех циклов.

  3. Вывести на экран квадраты всех четных чисел от 1 до 10.