Циклы for и foreach
Описанный в передыдущем разделе способ использования циклов while
является достаточно общеупотребительным. Сначала устанавливается начальное значение счетчика. Перед каждой итерацией значение счетчика проверяется внутри условия. В конце каждой итерации значение счетчика изменяется.
Цикл подобного типа можно записать и в более компактной форме с использованием оператора for
.
Базовая структура цикла for
имеет следующий вид:
for (выражение 1; условие; выражение 2) выражение 3
;
Выражение 1 выполняется один раз в начале цикла. Обычно в нем устанавливается начальное значение счетчика.
Выражение условие проверяется перед каждой итерацией. Если это выражение возвращает false
, цикл останавливается. Обычно в этом выражении выполняется сравнение значения счетчика с предельным значением.
Выражение 2 выполняется в конце каждой итерации. Обычно в нем изменяется значение счетчика.
Выражение 3 выполняется один раз во время каждой итерации. Обычно это выражение представляет собой блок кода и содержит тело цикла.
Пример цикла while
можно переписать с тспользованием цикла for
.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<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 (условие);
Цикл 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
следующим образом:
if (totalqty == 0):
echo "Вы ничего не заказали, повторите заказ!<br>";
exit;
endif;
Использование declare
Еще одна управляющая структура РНР, declare
, используется относительно редко по сранению с другими структурами. Общая форма этой управляющей структуры выглядит так:
declare (директива)
{
//блок кода
}
Данная структура служит для установки директив выполнения некоторого блока кода, т.е. правил, в соответствии с которыми будет запускаться определенный код. В настоящее время реализована только одна директива выполнения, называемая ticks
. Ее можно установить, указав в качестве аргумента директива конструкцию ticks=n
. Эта директива позволяет выполнять заданную функцию через каждых n строк кода внутри блока, что является исключительно полезным для целей профилирования и отладки.
Теперь вы знаете, как получить заказ клиента и как им манипулировать. Далее мы рассмотрим вопросы сохранения заказа с тем, чтобы позже его можно было извлечь и доставить заказанную в нем продукцию.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться