6.5: Оператор цикла For
Главная Страница » Книги по PHP » Самоучитель PHP 5 для чайников с примерами » Оператор цикла For
Без операторов цикла вообще трудно себе представить программирование. Например, нужно вывести числа от 1 до 100. Есть идеи? Наверное, кроме как написать сто раз подряд конструкцию echo, больше ничего не приходит в голову. Чтобы эффективно решать подобные задачи как раз и применяют операторы цикла.
Синтаксис оператора цикла for выглядит следующим образом:
for (выражение_1; выражение_2; выражение_3) действие;
Вся конструкция начинается со слова for. Далее в круглых скобках следуют через точку с запятой три выражения, после чего записывается выполняемое действие. Итак, чтобы понять смысл этих выражений рассмотрим листинг 6.13.
Листинг 6.13. Оператор for.
‹html›
‹head›
‹title›Оператор for‹/title›
‹/head›
‹body›
‹?php
for ($i = 1; $i <= 100; $i++)
{
echo $i;
}
?›
‹/body›
‹/html›
Эта программа решает задачу вывода чисел от 1 до 100. Первое выражение задает начальные данные и определяется один раз перед входом в цикл: в данном случае переменной $i присваивается значение 1. Второе выражение определяет условие нахождения в цикле. Другими словами, до тех пор, пока оно равно TRUE, программа будет продолжать циклично выполнять вывод значения переменной. И наконец, третье выражение представляет собой действие, которое нужно выполнить по завершению итерации. Здесь это увеличение переменной $i на единицу.
Итак, рассмотрим ход выполнения этой программы. Сначала значением переменной $i становится 1. Затем производится операция сравнения (вычисляется второе выражение), после чего, если результат TRUE, выполняется вывод сообщения и третье выражение, иначе выходим из цикла. Следующая итерация начинается уже с вычисления логического выражения.
На самом деле применение цикла for на практике зачастую напрашивается само собой, поэтому в данной главе более не будем разбирать примеры, в которых его можно использовать. Вместо этого рассмотрим особенности выражений в круглых скобках.
Надо сказать, что разработчики РНР сделали цикл for настолько универсальным, что в нем можно уместить целые программы. Начнем с самого простого и рассмотрим листинг 6.14.
Листинг 6.14. Бесконечный цикл.
‹?php
for (;;)
{
}
?›
Если запустить этот код, то в лучшем случае через некоторое время выведется сообщение об ошибке, в котором будет сказано, что программа выполняется очень долго. В действительности эта программа представляет собой бесконечный цикл. Первое, что бросается в глаза, так это отсутствие самих выражений, что допустимо в РНР. Если отсутствие первого и третьего выражения можно интерпретировать, как «ничего не делать», то второе означает TRUE. Именно поэтому цикл выполняется бесконечно. Каким образом выйти из такого цикла, мы разберем немного позже, когда будем рассматривать безусловные операторы.
Следующая особенность выражений оператора for - это то, что они могут состоять из нескольких выражений (листинг 6.15).
Листинг 6.15. Особенности оператора for.
‹html›
‹head›
‹title›Особенности оператора for‹/title›
‹/head›
‹body›
‹?php
for ($i=1, $j=9; $i <= 9, $j >= 1; $i++, $j--)
{
echo $i+$j;
echo "‹br›";
}
?›
‹/body›
‹/html›
Эта программа выводит девять раз подряд число 10. Заметим, что подвыражения разделяются между собой запятыми. Пояснений, наверное, требует только второе выражение, так как в других случаях просто перечисляются несколько действий. В логическом выражении если хотя бы одно из подвыражений равно FALSE, то произойдет выход из цикла, что, по сути, эквивалентно логической операции «и». На этом завершается рассмотрение особенностей выражений. Хочется добавить, что несмотря на такие универсальные возможности оператора for, не стоит ставить перед ним сверхзадач. Помните, что чем сложнее конструкция, тем труднее найти в ней ошибку.
Пожалуй, единственное, о чем мы еще не говорили, так это о теле цикла. Под этим понятием подразумевают действие, выполняемое при каждой итерации. В данном случае оно, как и у оператора if, может состоять из одной или нескольких команд. В первом случае можно не применять фигурные скобки (однако, это не рекомендуется), а во втором они необходимы.