После авторизации Вы получите доступ к файлам, скрытым материалам сайта, исходным кодам
возможность комментировать и т.д.

Вы можете авторизоваться на сайте всего одним кликом:

2016-06-22
Основы PHP → Ветвления
Ветвления в программировании, Вариативность программы, Условия, Выбор

Пожалуй, ни один сколько-нибудь сложный сценарий невозможно представить без ветвления. Они позволяют менять логику выполнения программы в зависимости от входных данных. В PHP существует группа условных операторов, которые и помогают разветвлять код программы.

Ветвления в PHP

Для лучшего понимания концепции ветвления взгляните на две блок-схемы ниже:

Блок-схема, расположенная слева, не имеет операторов ветвления. Программа, выполняющаяся согласно этой схеме, всегда будет последовательно проходить три блока операторов: Блок операторов 1, Блок операторов 2, Блок операторов 3.

Теперь взгляните на правую блок-схему. В ней присутствует условный оператор, который предлагает две альтернативы выполнения. Если условие выполнено, будет отрабатывать первый блок операторов, если условие не выполнено, отработает второй блок операторов. Таким образом, такая программа имеет два варианта исполнения: Блок операторов 1, Блок операторов 3, либо Блок операторов 2, Блок операторов 3.

Возможность определять альтернативу хода выполнения программы является мощнейшим инструментом программирования.

Оператор if

В самом простом виде использование оператора if выглядит так:
if (Условие) Действие;
Условие — это любое выражение с булевым значением ( true или false ). Действие выполняется тогда, когда Условие истинно (т. е. равно true ). В результате проверки какого-либо условия может выполняться сразу несколько операторов, тогда они образуют блок, который должен быть заключен в фигурные скобки:

if (Условие)
{
   Действие1;
   Действие2;
}

Если сравнивать данный сценарий с правой блок-схемой на рисунке выше, то Блоком операторов 1 здесь является последовательность:
Действие1;
Действие2;
Блок операторов 2 пуст, так же как и Блок операторов 3.

Часто возникает необходимость указать какие-либо действия не только, когда условие верно, но и когда оно ложно. В этом случае используется ключевое слово else:

if (Условие)
{
   Блок_операторов1
}
else
{
   Блок_операторов2
}

Данный сценарий соответствует правой блок-схеме на рисунке выше, если из нее исключить Блок операторов 3.

Ключевое слово elseif позволяет осуществлять проверку дополнительных условий, если предыдущие условия оказались ложными. Рассмотрим следующий пример:

if (Условие1)
{
   Блок_операторов1
}
   elseif (Условие2)
{
   Блок_операторов2
}
   elseif (Условие3)
{
   Блок_операторов3
}
else
{
   Блок_операторов4
}

Данный пример можно изобразить в виде части блок-схемы:

Допустим Условие1 и Условие2 ложные, а Условие3 истинно. В данном случае интерпретатор PHP проверит сначала Условие1 , убедится, что оно ложное, затем Условие2 . После этого дойдет до Условия3, увидит, что оно истинное, и войдет внутрь третьего блока операторов. После чего выполнение сценария продолжится уже после всей этой конструкции.

А что будет, если истинны сразу несколько условий, например Условие2 и Условие3 . В этом случае выполнится только один блок операторов первого истинного условия. В нашем случае, если истинны Условие2 и Условие3 , выполнится только Блок операторов2 . После чего интерпретатор перейдет к выполнению инструкций, которые идут после закрывающей скобки } последнего блока else. Чтобы лучше понять принцип работы, напишите небольшой сценарий из примера ниже:

<?php
$a = 1;
if ($a < 2)
{
   echo "a меньше 2";
}
   elseif ($a < 3)
{
   echo "a меньше 3";
}
elseif ($a < 4)
{
   echo "a меньше 4";
}
else
{
   echo "a больше либо равно 4";
}
?>

Посмотрите результат выполнения, меняя значение $a. Блоки кода операторов elseif и else выполняются только тогда, когда все проверенные ранее условия оказались равными false.

Тернарный оператор условия

Тернарный оператор имеет три операнда (отсюда такое название). Выглядит он следующим образом:
Переменная = Условие ? Значение1 : Значение2;
Если значение Условия истинно, то переменной присваивается Значение1, иначе Значение2 . Пример:

$a = (1 < 2) ? "1 меньше 2" : "1 не меньше 2";

Напишите этот небольшой сценарий и убедитесь, что переменной $a в данном случае присваивается строка "1 меньше 2", т. к. условие ( 1 < 2 ) истинно. Теперь попробуйте поменять знак с " < " на " > " и проверьте результат.

Тернарный оператор появился впервые в языке Си. Он позволяет включать в операцию присваивания проверку условия. Это красивая возможность, делающая код лаконичнее. Пользуйтесь тернарным оператором!

Однако остерегайтесь вложенности таких операторов, т. к. это сильно снижает читабельность кода.

Оператор switch

Оператор switch вычисляет значение заданного выражения и сравнивает его с предложенными вариантами. В случае совпадения выполняется соответствующий блок кода. Оператор switch имеет следующий синтаксис:

switch (Выражение)
{
case Значение1:
   Блок_операторов1;
break;
case Значение2:
   Блок_операторов2;
break;
default:
   Блок_операторов3;
}

Сначала switch вычисляет значение Выражения, после чего сравнивает его со значением каждой метки case ( Значение1 , Значение2 ). Как только обнаруживается совпадение, выполняется соответствующий блок операторов.

Обратите внимание на ключевое слово break в конце каждого блока case. break говорит о том, что выполнение операторов в блоке switch окончено, и нужно переходить к выполнению операторов после всего блока switch (после фигурной скобки). В случае, когда в конце блока case нет оператора break, интерпретатор продолжит выполнять операторы следующих блоков.

Если же после прохода по всем меткам case совпадение так и не встретилось, выполняются операторы из блока default. Впрочем, это необязательный блок и он может отсутствовать. В таком случае, если интерпретатор не нашел ни одного совпадения, выполнение программы продолжится со строки, следующей за блоком switch. Пример ниже:

<?php
$a = 1;
switch ($a)
{
   case 1:
     echo "a равно 1";
   break;
   case 2:
     echo "a равно 2";
   case 3:
     echo "a равно либо 2, либо 3. " .
     "Не могу определить точнее, " .
     "потому что забыли поставить " .
     "break в предыдущем case";
   break;
default:
     echo "a не равно ни 1, ни 2, ни 3";
}
?>

Иногда пропуск оператора break может использоваться намеренно для обеспечения правильной логики программы.

Особенностью языка PHP является то, что метками case могут быть переменные простых типов (не массивы и не объекты). Например, сценарий ниже, верен с точки зрения синтаксиса языка.

<?php
$a = 1;
$b = 2;

switch($a)
{
   case 1:
     echo "a равно 1";
break;
   case $b:
     echo "a равно 2";
   break;
   default:
     echo "a не равно ни 1, ни 2";
}
?>

Оператор switch принято использовать, когда алгоритм имеет более двух альтернатив выполнения. Иначе имеет смысл пользоваться связкой операторов if-else .

1235
0
Пожалуйста, авторизируйтесь, чтобы скачать архив с файлами урока