Языки программирования

Основные конструкции PHP

Любой сценарий PHP сформирован из ряда конструкций. Конструкциями могут быть операторы, функции, циклы. Конструкции обычно заканчиваются точкой с запятой. Кроме того, конструкции могут быть сгруппированы в группу, формируя группу конструкций с фигурными скобками {…}. Группа конструкций — это также отдельная конструкция.
Сегодня я кратко расскажу об основных конструкциях PHP. Приступим:

Условные операторы:

Условные операторы являются наиболее распространенными конструкциями во всех алгоритмических языках программирования.

1. Конструкция if

<?php
if (логическое выражение)
оператор;
?>
Конструкция if содержит логическое выражение. Если логическое выражение истинно (true), то оператор, следующий за конструкцией if будет исполнен, а если логическое выражение ложно (false), то следующий за if оператор исполнен не будет. Приведем пример:
<?php
if ($a > $b) echo "значение a больше, чем b";
?>

2. Конструкция else

Часто возникает потребность исполнения операторов не только в теле конструкции if, но и в случае, если условие конструкции if не выполнено. В данной ситуации нельзя обойтись без конструкции else. Такая конструкция будет называться if-else.
<?php
if (логическое_выражение)
инструкция_1;
else
инструкция_2;
?>
Если логическое_выражение истинно, то выполняется

инструкция_1, а иначе — инструкция_2. Как и в любом другом языке, конструкция else может опускаться, в этом случае при получении должного значения просто ничего не делается. Пример:
<?php
if ($a > $b) {
     echo "a больше, чем b";
} else {
     echo "a НЕ больше, чем b";
}
?>

Конструкция if-else.

Обратите внимание на расположение двоеточия (:)! Если его пропустить, будет сгенерировано сообщение об ошибке.
<?php
if (логическое_выражение):
команды;
elseif(другое_логическое_выражение):
другие_команды;
else:
иначе_команды;
endif
?>

3. Конструкция elseif

elseif — это комбинация конструкций if и else. Эта конструкция расширяет условную конструкцию if-else.
<?php
if (логическое_выражение_1)
оператор_1;
elseif (логическое_выражение_2)
оператор_2;
else
оператор_3;
?>

Практический пример использования конструкции elseif:

<?php
if ($a > $b) {
     echo "a больше, чем b";
} elseif ($a == $b) {
     echo "a равен b";
} else {
     echo "a меньше, чем b";
}
?>

Управляющие конструкции

Циклы:

Циклы позволяют повторять определенное (и даже неопределенное — когда работа цикла зависит от условия) количество раз различные операторы. Данные операторы называются телом цикла. Проход цикла называется итерацией.

1. Цикл с предусловием while

Цикл с предусловием while работает по принципам:
  • Вычисляется значение логического выражения.
  • Если значение истинно, выполняется тело цикла, в противном случае — переходим на следующий за циклом оператор.
<?php
while (логическое_выражение)
инструкция;
?>
В данном случае телом цикла является инструкция. Обычно тело цикла состоит из большого числа операторов. Пример цикла с предусловием while:
<?php
$x=0;
while ($x++<10) echo $x;
// Выводит 12345678910
?>

2. Цикл с постусловием do while

В отличие от цикла while, этот цикл проверяет значение выражения не до, а после каждого прохода. Таким образом, тело цикла выполняется хотя бы один раз.
<?php
do
{
тело_цикла;
}
while (логическое_выражение);
?>
После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается. Пример скрипта:
<?php
$x = 1;
do {
     echo $x;
} while ($x++<10);
?>

3. Цикл со счетчиком for

Цикл со счетчиком используется для выполнения тела цикла определенное число раз. С помощью цикла for можно (и нужно) создавать конструкции, которые будут выполнять действия не такие, как простая переборка значения счетчика.
<?php
for (инициализирующие_команды; условие_цикла; команды_после_итерации) { тело_цикла; }
?>
Цикл for начинает свою работу с выполнения инициализирующих_команд. Данные команды выполняются только один раз.

После этого проверяется условие_цикла, если оно истинно (true), то выполняется тело_цикла. После того, как будет выполнен последний оператор тела, выполняются команды_после_итерации. Затем снова проверяется условие_цикла. Если оно истинно (true), выполняется тело_цикла и команды_после_итерации.
<?php
for ($x=0; $x<10; $x++) echo $x;
//Выведит 0123456789
?>
Для цикла for имеется и альтернативный синтаксис:
<?php
for(инициализирующие_команды; условие_цикла; команды_после_итерации):
операторы;
endfor;
?>

4. Цикл перебора массивов foreach

<?php
foreach (массив as $ключ=>$значение)
команды;
?>
Команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=>значение оказывается в переменных $ключ и $значение. Пример работы цикла foreach:
<?php
$names["Иванов"] = "Андрей";
$names["Петров"] = "Борис";
$names["Волков"] = "Сергей";
$names["Макаров"] = "Федор";
foreach ($names as $key => $value) {
echo "<b>$value $key</b><br>";
}
?>
Рассмотренный сценарий выводит
Андрей Иванов
Борис Петров
Сергей Волков
Федор Макаров
У цикла foreach имеется и другая форма записи, которую следует применять, когда нас не интересует значение ключа очередного элемента.
<?php
foreach (массив as $значение)
команды;
?>
Цикл foreach оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть «видны» из тела цикла. Что позволяет в качестве массива использовать не только переменную, но и результат работы какой-нибудь функции, возвращающей массив (в этом случае функция будет вызвана всего один раз — до начала цикла, а затем работа будет производиться с копией возвращенного значения).

5. Конструкция break

Очень часто для того, чтобы упростить логику сложного цикла, удобно иметь возможность его прервать в ходе очередной итерации. Для этого и существует конструкция break, которая осуществляет немедленный выход из цикла.
Она может задаваться с одним необязательным параметром — числом, которое указывает, из какого вложенного цикла должен быть произведен выход. По умолчанию используется 1, т. е. выход из текущего цикла, но иногда применяются и другие значения.
<?php
break; // По умолчанию
break(номер_цикла); // Для вложенных циклов (указывается номер прерываемого цикла)
?>
Пример:
<?php
$x=0;
while ($x++<10) {
if ($x==3) break;
echo "<b>Итерация $x</b><br>";
}
// Когда $x равен 3, цикл прерывается
?>
Цикл выведет:
Итерация 1
Итерация 2
Если нам нужно прервать работу определенного (вложенного) цикла, то нужно передать конструкции break параметр — номер_цикла, например, break(1). Нумерация циклов выглядит так:
for (...) // Третий цикл
{
  for (...) // Второй цикл
  {
     for (...) // Первый цикл
     {
     }
  }
}

6. Конструкция continue

Конструкция continue так же, как и break, работает только «в паре» с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой (конечно, если выполняется условие цикла для цикла с предусловием). Точно так же, как и для break, для continue можно указать уровень вложенности цикла, который будет продолжен по возврату управления.
В основном continue позволяет вам сэкономить количество фигурных скобок в коде и увеличить его удобочитаемость. Это чаще всего бывает нужно в циклах-фильтрах, когда требуется перебрать некоторое количество объектов и выбрать из них только те, которые удовлетворяют определенным условиям.
<?php
$x=0;
while ($x++<5) {
if ($x==3) continue;
echo "<b>Итерация $x</b><br>";
}
// Цикл прервется только на третьей итерации
?>
Cкрипт выведет:
Итерация 1
Итерация 2
Итерация 4
Итерация 5

Конструкция выбора:

switch-case

Часто вместо нескольких расположенных подряд инструкций if-else целесообразно воспользоваться специальной конструкцией выбора switch-case. Данная конструкция предназначена для выбора действий, в зависимости от значения указанного выражения.
Конструкция switch-case чем-то напоминает конструкцию if-else. Конструкцию выбора можно использовать, если предполагаемых вариантов много, например, более 5, и для каждого варианта нужно выполнить специфические действия.
<?php
switch(выражение) {
case значение1: команды1; [break;]
case значение2: команды2; [break;]
. . .
case значениеN: командыN; [break;]
[default: команды_по_умолчанию; [break]]
}
?>
Принцип работы конструкции switch-case такой:

  • Вычисляется значение выражения;
  • Просматривается набор значений. Пусть значение1 равно значению выражения, вычисленного на первом шаге. Если не указана конструкция break, то будут выполнены команды i, i+1, i+2, … , N. В противном случае будет выполнена только команда с номером i.
  • Если ни одно значение из набора не совпало со значением выражения, тогда выполняется блок default, если он указан.

Пример использования конструкции switch-case:
<?php
$x=1;
// Используем if-else
if ($x == 0) {
    echo "x=0<br>";
} elseif ($x == 1) {
    echo "x=1<br>";
} elseif ($x == 2) {
    echo "x=2<br>";
}
// Используем switch-case
switch ($x) {
case 0:
    echo "x=0<br>";
    break;
case 1:
    echo "x=1<br>";
    break;
case 2:
    echo "x=2<br>";
    break;
}
?>
Рассмотренный сценарий выводит x=1 дважды.

Конструкция возврата значений:

return

Конструкция return возвращает значения, преимущественно из пользовательских функций, как параметры функционального запроса. При вызове return исполнение пользовательской функции прерывается, а конструкция return возвращает определенные значения.
Если конструкция return будет вызвана из глобальной области определения (вне пользовательских функций), то скрипт также завершит свою работу, а return также возвратит определенные значения.
Пример использования конструкции return для возврата значений типа integer:
<?php
function retfunct()
{
     return 7;
}
echo retfunct();   // выводит '7'.
?>
Пример возврата конструкцией return массивов:
<?php
function numbers()
{
     return array (0, 1, 2);
}
list ($zero, $one, $two) = numbers();
echo $zero;
echo $one;
echo $two;
// Выводит '012'
?>

Конструкции включений:

Конструкции включений позволяют собирать PHP программу (скрипт) из нескольких отдельных файлов. В PHP существуют две основные конструкции включений: require и include.

1. require()

Конструкция require позволяет включать код до выполнения сценария.
require имя_файла;
При запуске программы интерпретатор заменит инструкцию на содержимое файла имя_файла (этот файл может также содержать сценарий на PHP).

2. include

Конструкция include также предназначена для включения файлов в код сценария PHP. В отличие от конструкции require конструкция include позволяет включать файлы в код PHP скрипта во время выполнения сценария.
include имя_файла;

3. require_once и include_once

Используя конструкции однократного включения require_once и include_once, можно быть уверенным, что один файл не будет включен дважды. Работают конструкции require_once и include_once так же, как и requre и include. Разница в их работе лишь в том, что перед включением файла интерпрететор проверяет, включен ли указанный файл ранее или нет. Если да, то файл не будет включен вновь.
Самоучитель по PHP