Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_PO_IP.docx
Скачиваний:
16
Добавлен:
18.05.2015
Размер:
693.24 Кб
Скачать

1. For (выражение1; выражение2; выражение3) {блок_выполнения}

2. For (начальное_выражение; условное_выражение; заключительное _выражение) {блок_выполнения}

  1. for (инициализация; условие; приращение) { блок_выполнения}

  2. for (инициализирующие_команды; условие_цикла; команды_после _прохода) {тело_цикла}

В дополнение отметим, что в PHP возможна альтернативная форма оператора, в которой тело цикла (блок выполнения) обрамляется не фигурными скобками, а двоеточием и служебным словом endfor:

for (выражение1; выражение2; выражение3): блок_выполнения endfor;

При сравнении приведённых форм с синтаксисом традиционного оператора for видно, что он является частным случаем универсального.

Анализ четырёх форм позволяет в целом понять логику работы оператора. Очевидно, что перед началом итераций блока тела цикла происходит выполнение каких-то действий. Наиболее общей из них выглядит форма 1.

С расшифровкой выражений 2-4 все понятно. Сравнивая формы 3 и 1 догадываемся, что эти действия должны отображаться в выражении1 (или в начальном выражении).

Так же, как и в традиционном цикле, общие правила выполнения (алгоритм) универсального for следующие:

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

  2. Условное выражение (выражение2) проверяется на истинность перед началом каждой итерации тела цикла.

  3. После очередного выполнения тела цикла выполняется заключительное выражение (выражение3).

  4. Рассмотренные выражения разделяются точкой с запятой (;).

Существуют определённые правила построения выражений, которые легче всего изучать, рассматривая соответствующие примеры.

Начнём с классического примера (Пример 2 -4):

Пример 2‑4

<?php

//Пример №1

echo "Начинает работать пример №1 <br>";

$t = 0;

for($i = 0,$j = 1; $t <= 4; $i++, $j++)

{

$t = $i + $j;

echo "\$t= $t, <br>";

}

echo "\$i = $i, \$j = $j, \$t = $t, <br>";

//Пример №2

echo "Начинает работать пример №2 <br>";

for($i = 0, $j= 0, $k = "Test" . ": = "; $i < 10;$i++)$k = $k . ".";

echo $k;

echo "<br>";

//Один оператор в теле цикла можно написать без фигурных скобок

echo 'Далее - результаты работы программы с телом кода в { } <br>';

for($i = 0, $j= 0, $k = "Test" . ": = "; $i < 10;$i++)

{$k = $k . ".";

echo "\$k равно $k <br>";

}

echo $k;

?>

Обратите внимание на то, что для увеличения $i на 1 используется оператор сложения с присваиванием. Для этого есть веские причины: циклы for в PHP не поддерживают более традиционной записи $i = $i + 1.

На основании рассмотренных примеров можно дополнить сформулированный выше список правил:

  1. Выражения в первой строке цикла могут состоять, в свою очередь, из набора других выражений, отделяемых запятыми.

  2. Выражение1 и выражение3 могут включать в себя любые действия.

  3. Циклы for в PHP не поддерживают традиционной записи увеличения переменных цикла.

Рассмотрим процесс выполнения цикла в примере №1 (Пример 2 -4):

    1. Выполняется начальное выражение: переменной $i присваивается значение 0, а переменной $j – значение 1.

    2. Проверяется условное выражение – не превышает ли значение $t числа 4? Поскольку это так, выражение условия - ИСТИНА и тело цикла будет выполняться.

    3. Выполняются действия внутри тела цикла. Вычисленное значение $t выводится на экран.

    4. После выполнения тела цикла, итерация заканчивается выполнением заключительного выражения (выражение 3: $i++, $j++), в результате чего значения $i и $j увеличиваются на 1 и становятся равными 1 и 2 соответственно.

    5. В начале следующей итерации проверяется условное выражение. Текущее значение $t равно 1, и поэтому тело цикла будет в очередной раз выполняться.

    6. В конце данной итерации значения $i и $j становятся равными 2 и 3.

    7. Поскольку текущее значение $t = 3, снова пройдёт очередная итерация и значение $t станет равным 5.

    8. Очередное вычисление условного выражения даст значение ЛОЖЬ. Поэтому произойдёт выход из цикла с печатью рассмотренных переменных цикла $i, $y, $t.

Семантика цикла for в обобщенном графическом отображении представлен на рисунке Рис. 2-6. Проведённый выше анализ и рассмотренные примеры позволяют легко расшифровать эту конструкцию.

Рис. 2‑4. Обобщённое графическое отображение семантики цикла for

Многие новички не понимают, зачем создавать несколько разновидностей циклов в языке программирования (будь то PHP или какой-либо другой язык). Почему нельзя обойтись одной циклической конструкцией? Дело в том, что у цикла for существует несколько специфических особенностей. Как следует из рассмотренных выше примеров, можно инициализировать несколько переменных одновременно, разделяя команды инициализации запятыми.

Другие модификации оператора цикла возможные в PHP рассмотрены в разделе 2.2.9.5.

Сравнение конструкций for и while

Хотя циклические конструкции for и while выполняют практически одинаковые функции, считается, что цикл for делает программу более наглядной. Это объясняется тем, что программист при виде команды for немедленно получает всю необходимую информацию о механике и продолжительности цикла, так как условие изменяется в самой управляющей конструкции, а не где-то внутри блока.

С другой стороны, в командах while приходится тратить лишнее время на поиск обновлений управляющих переменных — в больших программах это может занимать немало времени.