Глава 13. Структуры управления данными в PHP
В предыдущих главах мы рассмотрели числовые переменные и константы, познакомились с набором операций, с помощью которых написали небольшие программы. Эти программы имели линейную структуру (т. е. каждый оператор в них выполнялся один раз) и ориентировались в основном на арифметические вычисления. В данных программах отсутствовали какие-либо логические условия, касающиеся обработки отдельных переменных или отдельных операций. При каждом задании такой программы она выполнялась целиком, т. е. работали все ее операторы.
В этой главе обсуждается следующий, более высокий уровень, на котором формируются операторы. Тут будут рассмотрены управляющие конструкции языка. В РНР к ним относятся условные конструкции (ветвления) и циклические конструкции (циклы). Под ветвлением понимается ситуация, когда на основании проверки некоторых условий в программе реализуется один из несколько заранее предопределенных путей решения задачи. Используя циклические конструкции, программист может организовать многократное выполнение некоторой последовательности команд (фрагмента программы) без повторного описания этого фрагмента в программе. Прежде чем перейти к рассмотрению управляющих структур языка РНР, необходимо определить такое базовое понятие, как оператор.
Операторы являются наименьшими исполняемыми единицами программы. Они управляют процессом выполнения программы. Операторы в законченном блоке кода выполняются по порядку, каждый следующий только после окончания работы предыдущего, за исключением случаев, когда управляющий оператор заставляет переходить программу в другое место. Операторы можно разделить на четыре категории:
• последовательные операторы;
• операторы выбора;
• операторы цикла;
• операторыперехода.
Все они будут рассмотрены в следующих параграфах. Более подробное описание того, что вы сможете изучить в этой главе:
• последовательные операторы;
• операторыобъявления;
• операторы выражения;
• пустые операторы;
• составные операторы;
• операторы выбора;
• конструкция if;
• конструкция if ... else;
• конструкция elseif;
• альтернативный синтаксис для управляющих структур;
• конструкция switch;
• операторы цикла;
• конструкция while;
• конструкция do...while;
• конструкция for;
• конструкция foreach;
• операторы перехода;
• оператор break;
• оператор continue;
• оператор возврата return;
• включение исходного кода текста, содержащегося в файле;
• оператор require();
• оператор include();
• оператор require_once();
• оператор include_once().
13.1. Последовательные операторы
Последовательными операторами называются такие операторы, которые не управляют непосредственно выполнением других операторов в программах являются последовательными. Всего существует четыре типа последовательных операторов:
• операторы объявления;
• операторывыражения;
• пустые операторы;
• составные операторы.
13.2. Операторы объявления
Операторы объявления — единственные операторы, которые могут располагаться вне функции. Они состоят из объявления переменной или функции и заканчиваются точкой с запятой (;). Объявление можно сочетать с присваиванием, как в следующем примере:
13.3. Операторы выражения
Операторы выражения — это выражения, за которыми следует точка с запятой. Это обычный вид операторов. Например:
$а++;
$а + $b;
--$с;
$а = goodway($y) + $s;
Заметьте, что строка $а + $b; хоть и будет компилироваться без ошибок, реального смысла не имеет.
13.4. Пустые операторы
Пустой оператор является одним из самых важных операторов:
Он состоит только из точки с запятой. Хотя такой оператор может показаться бесполезным, он удобен в тех случаях, когда присутствие оператора синтаксически необходимо, но совершенно неуместно. Иногда такое встречается в операторах while и for:
while (test_function($x));
13.5. Составные операторы
Составной оператор, или блок (block), представляет из себя несколько операторов, заключенных в фигурные скобки ({}). Составные операторы могут появляться везде, где допустимы простые операторы. Они позволяют выполнять последовательность операторов там, где по синтаксису подразумевается только один оператор. Например:
<?
$а = 2;
if ($а >= 0) {
$d = 2;
$f = 3;
$n = 2;
$с = $а + $d;
$n += $c/$f;
}
$c++;
echo $c;
?>
При описании данного примера выделим кое-какие отличия языка программирования РНР от С. Дело в том, что в С переменные, объявленные внутри составных операторов, могут быть использованы только внутри блока. Таким образом, переменные в предыдущем примере вне скобок не определены. Это принцип работы языка С. Что касается РНР, то каких-либо строгих ограничений в этом направлении не существуют. Этот пример позволяет вам убедиться в том, что переменные, объявленные внутри составных операторов, могут быть использованы не только внутри блока, но также и за его пределами.
Тела функций также заключаются в скобки, следовательно, тело функции является составным оператором. Пустое тело функции — это один из немногих случаев, в которых имеет смысл пустой блок (т. е. составной пустой оператор). При разработке программ можно создавать заготовки функций — функции с пустыми телами — и заполнять их по ходу дела.
Точка с запятой после закрывающей скобки не обязательна, однако хуже не будет, если ее поставить.
13.6. Операторы выбора
Часто определенная часть программы может выполняться только при соблюдении некоторых условий. В качестве примера можно привести программу социологического опроса (заполнения анкеты), в которой задается вопрос о классе транспортных средств, которыми респондент имеет право управлять. Однако сначала необходимо спросить, имеются ли вообще у анкетируемого водительские права. Реализовать данную программу будет проще всего, применив именно операторы выбора.
Операторы выбора выполняют другие операторы в зависимости от условных значений. Это позволяет управлять программой на основе определенных критериев. Существует два типа таких операторов:
• оператор if
• оператор switch.