PHP 4 на практике


For


Цикл for обеспечивает еще одну возможность многократного выполнения блоков. Он отличается от цикла while только тем, что условие изменяется в самой

управляющей конструкции, а не где-то внутри блока команд. Как и в случае с циклом while, цикл выполняется до тех пор, пока проверяемое условие остается истинным. Общая форма конструкции for выглядит так:

for (инициализация: условие; приращение) {

блок

}

Условная часть цикла for в действительности состоит из трех компонентов. Инициализация выполняется всего один раз и определяет начальное значение управляющей переменной цикла. Условие проверяется в начале каждой итерации и определяет, должна ли выполняться текущая итерация или нет. Наконец, приращение определяет изменение управляющей переменной при каждой итерации. Возможно, термин «приращение» в данном случае неточен, поскольку переменная может как увеличиваться, так и уменьшаться в соответствии с намерениями программиста. Следующий пример демонстрирует простейший случай применения цикла for:

for ($i = 10; $1 <- 100: $1 +=10) : // Обратная косая черта предотвращает

print "\$i = $i <br>"; endfor; // возможную интерполяцию переменной $1

Выполнение этого фрагмента дает следующий результат:

$i = 10

$i = 20

$i = 30

$i = 40



$i - 50

$i = 60

$i = 70

$i = 80

$i = 90

$i = 100

В этом примере управляющая переменная $i инициализируется значением 10. Условие заключается в том, что цикл продолжается до тех пор, пока $i не достигнет или не превысит пороговую величину 100. Наконец, при каждой итерации значение $i увеличивается на 10. В результате команда print выполняется 10 раз, каждый раз выводя текущее значение $i. Обратите внимание: для увеличения $i на 10 используется оператор сложения с присваиванием. Для этого есть веские причины, поскольку циклы for в РНР не поддерживают более традиционной записи $i = $i + 10.

Кстати, этот пример можно записать и в другом виде, но с теми же результатами:

for ($i = 10; $i <= 100; print "\$i - $i <br>". $i+=10);


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

Например, вы можете инициализировать несколько переменных одновременно, разделяя команды инициализации запятыми:

for ($x=0,$y=0: $x+$y<10; $x++) :

$У += 2;                    // Увеличить $у на 2 

print "\$y = $y <BR>";      // Вывести значение $у

$sum = $x + $y;

print "\surn = $sum<BR>";   // Вывести значение $sum

endfor;

Результат:

$y = 2 

$sum = 2 

Sy = 4 

$sum = 5 

$y = 6 

$sum = 8 

$y = 8 

$sum = 11

Этот пример выводит текущие значения $y и суммы $х и $у. Как видно из приведенных результатов, выводится значение $sum = 11, хотя эта сумма выходит за границы условия цикла ($х + $у < 10). Это происходит из-за того, что при входе в данную итерацию переменная $у была равна 6, а переменная $х была равна 2. Значения переменных соответствовали условию цикла, поэтому $х и $у были присвоены новые значения, в результате чего была выведена сумма И. При очередной проверке условия сумма 11 превысила пороговое значение 10 и цикл завершился.

В управляющих выражениях циклов for могут отсутствовать любые компоненты. Например, вы можете передать ранее инициализированную переменную прямо в цикл, не присваивая ей определенного начального значения. Возможны и другие ситуации — например, приращение переменной цикла может осуществляться в зависимости от некоторого условия, определяемого в цикле. В этом случае приращение не должно указываться в управляющем выражении. Пример:

$х = 5:

for (: : $х +=2) :

print " $х ";

if ($x == 15) :

break; // Выйти из цикла for

endif;

endfor;

Результат выглядит так:

5 7 9 11 13 15

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


Содержание раздела