ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Циклы for и foreach. Циклы do .. while

Циклы

Циклы 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 строк кода внутри блока, что является исключительно полезным для целей профилирования и отладки.

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