Описанный в передыдущем разделе способ использования циклов while является достаточно общеупотребительным. Сначала устанавливается начальное значение счетчика. Перед каждой итерацией значение счетчика проверяется внутри условия. В конце каждой итерации значение счетчика изменяется.
Цикл подобного типа можно записать и в более компактной форме с использованием оператора for.
Базовая структура цикла for имеет следующий вид:
for (выражение 1; условие; выражение 2) выражение 3;
Выражение 1 выполняется один раз в начале цикла. Обычно в нем устанавливается начальное значение счетчика.
Выражение условие проверяется перед каждой итерацией. Если это выражение возвращает false, цикл останавливается. Обычно в этом выражении выполняется сравнение значения счетчика с предельным значением.
Выражение 2 выполняется в конце каждой итерации. Обычно в нем изменяется значение счетчика.
Выражение 3 выполняется один раз во время каждой итерации. Обычно это выражение представляет собой блок кода и содержит тело цикла.
Пример цикла while можно переписать с тспользованием цикла for.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Стоимость доставки товара в зависимости от расстояния</title>
</head>
<body class="text_blok">
<table width="20%" border="0" cellpadding="3" cellspacing="0">
<tr>
<td bgcolor="#000066" align="center" style="color:#FFF">Расстояние</td>
<td bgcolor="#000066" align="center" style="color:#FFF">Стоимость</td>
</tr>
<?php
for ($distance = 50; $distance <= 250; $distance += 50)
{
echo "<tr>\n <td align = 'right'>$distance</td>\n";
echo "<td align = 'right'>". $distance*10 ."</td>\n</tr>\n";
}
?>
</table>
</body>
</html>
В окне веб-браузера это будет выглядеть ТАК.
В функциональном смысле циклы while и for идентичны. Однако цикл for имеет несколько более компактную форму и содержит на две строки меньше.
Оба цикла эквивалентны — ни один из них ничем не лучше и не хуже другого. В конкретной ситуации можно использовать тот из них, который кажется вам более подходящим.
Попутно отметим, что можно объеденить переменные переменных и цикла for для организации итераций по последовательности повторяющихся полей формы.
Например, при наличии полей формы с такими именами, как name1, name2, name3 и так далее, их можно обрабатывать следующим образом:
for ($i=1; $i <= $numnames; $i++)
{
$temp = "name$i";
echo $$temp. '<br>';// здесь может быть любая другая обработка
}
Динамически генерируя имена переменных, можно обращаться к каждому из полей по очереди.
Наряду с циклом for существует цикл foreach, специально предназначенный для работы с массивами. Его применение будет рассмотрено позднее.
Последний тип цикла, который мы рассмотрим, работает несколько иначе. Общая структура оператора do .. while имеет следующий вид:
do
выражение;
while (условие);
Цикл do .. while отличается от цикла while тем, что в нем условие проверяется в конце. Это означает, что в цикле do .. while оператор или блок операторов внутри цикла всегда выполняется, по крайней мере один раз.
Даже в приведенном ниже примере, где условие с самого начала имеет значение false и никогда не может принять значение true, цикл выполняется один раз до того, как условие будет проверено и цикл завершиться.
$num = 100;
do
{
echo $num. '<br>';
}
while ($num < 1);
Если вы хотите остановить выполнение какого-либо фрагмента, можно воспользоваться одним из трех подходов в зависимости от эффекта, который нужно получить.
Если необходимо прекратить выполнение цикла, можно воспользоваться оператором break, как было описано выше, при использовании оператора switch. В случае применения оператора break в цикле, выполнения сценария продолжится, начиная со строки следующим за циклом.
Если требуется перейти к следующей итерации цикла, можно воспользоваться оператором continue.
Для завершения выполнения всего РНР-сценария служит оператор exit. Обычно этот оператор используется при проверке на ошибки. Например, ранее приведенный пример можно было бы изменить следующим образом:
if ($totalqty == 0)
{
echo 'Вы ничего не заказали, повторите заказ!<br>';
exit;
}
Оператор exit прекращает выполнение оставшейся части РНР-сценария.
Для всех рассмотренных выше управляющих структур предусмотрена альтернативная форма синтаксиса, при которой открывающаяся фигурная скобка ({ ) заменяется двоеточием (:), а закрывающаяся фигурная скобка ( } ) — новым ключевым словом endif, endswitch, endwhile, endfor, endforeach, в зависимости от используемой управляющей структуры. Альтернативная форма синтаксиса недоступна для циклов do .. while.
Например, показанный выше код может быть преобразован с использованием ключевых слов if и endif следующим образо:
Еще одна управляющая структура РНР, declare, используется относительно редко по сранению с другими структурами. Общая форма этой управляющей структуры выглядит так:
declare (директива)
{
//блок кода
}
Данная структура служит для установки директив выполнения некоторого блока кода, т.е. правил, в соответствии с которыми будет запускаться определенный код. В настоящее время реализована только одна директива выполнения, называемая ticks. Ее можно установить, указав в качестве аргумента директива конструкцию ticks=n. Эта директива позволяет выполнять заданную функцию через каждых n строк кода внутри блока, что является исключительно полезным для целей профилирования и отладки.
Теперь вы знаете, как получить заказ клиента и как им манипулировать. Далее мы рассмотрим вопросы сохранения заказа с тем, чтобы позже его можно было извлечь и доставить заказанную в нем продукцию.
Похожие материалы по теме:
Нетрадиционное использование do-while и break. Цикл foreach. Конструкция switch-case. Инструкция require. Инструкция include