ProfiPHPProfiPHP
  1. Главная
  2. Самоучитель PHP 7
  3. Условия

Условия

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

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


Условный оператор If имеет следующий синтаксис:
if (условие) оператор1 else оператор2
Условие, в качестве аргумента принимает логическую переменную или выражение, возвращающее логическое значение. Если оно истинно, то выполняется оператор1, иначе выполняется оператор2.
Переменную типа Boolean, принимающую только два значения True и False (или 1 и 0), часто называют флагом. Причем флаг считается установленным, если переменная принимает значение True, и сброшенным, если переменная принимает значение False.
<?php
$flag = true; // Истина
if ($flag) {
echo '<p>Условие истинно</p>';
} else {
echo '<p>Условие ложно</p>';
}
Оператор If проверяет условие $flag , и если его значение True, выполняется код в фигурных скобках, следующий за If, а если False - код после ключевого слова Else. Если блок Else не требуется, его можно опустить.

Фигурные скобки в оператор1 и оператор2 необязательны, если необходимо выполнить только один оператор. Однако стандарт кодирования PSR настоятельно рекомендует использовать оператор If c фигурными скобками.

Проверка дополнительных условий возможна также при помощи оператора Elseif:
if (условие) оператор1 elseif оператор2 else оператор3
Можно включать сколько угодно блоков Elseif, но ключевое слово Else в каждом If может присутствовать только в одном экземпляре и определяет, что нужно делать, если никакие другие условия не являются истинными.
<?php
$digit = 2;
if ($digit == 1) {
echo "Число $digit";
} elseif ($digit == 2) {
echo "Число $digit";
} else {
echo "Другое число";
}
РНР предоставляет также возможность альтернативного синтаксиса условного оператора - без фигурных скобок. В этом случае операторы If, Else и Elseif заканчиваются двоеточием, а сама конструкция If завершается обязательным ключевым словом Endif. Но использование альтернативного синтаксиса в современной разработке не поощряется и напрямую запрещается стандартом кодирования PSR.
<?php
$digit = 3;
if ($digit == 1) :
echo "Число $digit";
elseif ($digit == 2) :
echo "Число $digit";
else :
echo "Другое число";
endif;

Логические операторы


Зачастую в программировании требуется использовать несколько условий, объединенных логическими операторами, которые оперируют переменными логического типа.

&& - Логическое И, возвращает True, если оба операнда равны True, в противном случае возвращается False.

AND - Логическое И, отличающееся от оператора && меньшим приоритетом.

|| - Логическое ИЛИ, возвращает True, если хотя бы один из операндов, равен True;

OR - Логическое ИЛИ, отличающееся от оператора || меньшим приоритетом.

!$х - Возвращает либо True, если равен False, либо False, если равен True.

Операторы && и || имеют альтернативу в виде операторов AND и OR, обладающих более низким приоритетом. То есть если в арифметических операциях сначала выполняется умножение и деление и лишь затем сложение и вычитание, то в логических операторах сначала выполняются && и || и лишь затем AND и OR.

Если первый операнд равен True в логических операторах || и OR, то в вычислении второго операнда отсутствует надобность - не зависимо от того, будет он равен True или False, логическое выражение все равно примет значение True.

Разберем пример с оператором ИЛИ и равенства =:
$content = file_get_contents( 'https://profiphp.ru') OR exit ('Ошибка');
echo $content;
В данном примере сначала выполняется условие с оператором присвоения "равно" =, а только потом операции OR. В результате будет выведана на экран страница сайта.

Но если использовать оператор ||, который имеет приоритет выше чем оператор =, тогда сначала проверяется условия ИЛИ, и потом логическое значение True (при успешном file_get_contents) присваивается переменной.

Старайтесь избегать проверок, основанных на операторах || и OR. Вместо этого лучше использовать оператор If, тогда скрипты получаются пусть и несколько более объемными, зато более читабельными.

Условный оператор х ? у : z


В PHP существует еще одна возможность замены оператора If, которая называется тернарным оператором:
выражение1 ? выражение2 : выражение3
Если Выражение1 истинно, то вычисляется значение Выражение2, которое и становится результатом, иначе в качестве результата берется Выражение3. Классическим примером условной операции является получение абсолютного значения переменной:
<?php
$x = -10;
$x = $x < 0 ? -$x : $x;
echo $x; // 10
Если переменная оказывается меньше нуля - у нее меняется знак, если переменная оказывается больше нуля, она возвращается без изменений. Основное назначение условного оператора - сократить конструкцию If до одной строки, если это не приводит к снижению читабельности.

Оператор ??


Специальный оператор ??, который введен в РНР 7, позволяет проинициализировать переменную только в том случае, если переменная не была ранее проинициализирована или ей присвоено значение Null:
<?php
$a = null;
$b = 'str';
$a = $a ?? 5; // 5
$b = $b ?? 5; // str
Если переменная ранее не существовала, она будет создана, а в качестве значения ей присвоится второй операнд. Если же переменная существует, то ее значение останется неизменным.

Переключатель Switch


Переключатель Switch предназначен для организации множественного выбора и имеет следующий синтаксис:
switch(выражение)
{
case значение1:
операторы;
break;
case значение2:
операторы;
break;
default:
операторы;
}
Управляющая структура Switch передает управление тому из помеченных операторов Case, для которого значение константного выражения совпадает со значением переключающего выражения.

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

Если же значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к оператору, помеченному меткой Default. В каждом переключателе может быть не более одной метки Default. Ключевые слова Break и Default можно опускать, поскольку они не являются обязательными.

В следующем примере в зависимости от того, какое значение принимает переменная $color, в окно браузера выводится та или иная фраза. Если переменная $color принимает значение "red", выводится фраза "Цвет красный", если переменная принимает значение "yellow", выводится фраза "Цвет желтый". Если $color принимает любое другое значение, управление передается блоку Default и выводится фраза "Другой цвет".
<?php
$color = 'yellow';
switch($color)
{
case 'red':
echo 'Цвет красный';
break;
case 'yellow':
echo 'Цвет желтый';
break;
default:
echo 'Другой цвет';
}
Операторы в блоке Case могут быть заключены в необязательные фигурные скобки. Если пропущен оператор Break, то скрипт выполняет операторы следующего блока до тех пор, пока не закончится switch или не встретится Break. Если изменить предыдущий пример и удалить Break, тогда результатом будет строка: "Цвет желтый Другой цвет".

РНР позволяет использовать альтернативный синтаксис без фигурных скобок с применением ключевых слов switch: и endswitch:
<?php
$color = 'yellow';
switch($color):
case 'red':
echo 'Цвет красный';
break;
case 'yellow':
echo 'Цвет желтый';
break;
default:
echo 'Другой цвет';
endswitch;
Оператор Switch позволяет создавать логическое выражение, которое сравнивается со значением True или False. Например:
<?php
switch(true):
case (5 < 2):
echo 'Пять меньше двух';
break;
case (5 > 2):
echo 'Пять больше двух';
break;
endswitch;

Оператор Goto


Оператор Goto позволяет осуществлять безусловный переход на метку, название которой указывается в качестве единственного аргумента.
Goto метка;
...
метка:
Приведем пример организации цикла при помощи двух операторов Goto.
<?php
$i = 0;
begin:
$i++;
echo $i;
if ($i >= 10) goto finish;
goto begin;
finish:
Интерпретатор, доходя до инструкции goto begin, перемещается к метке begin, таким образом достигается зацикливание программы. Для выхода из программы используется if-условие, при срабатывании которого выполняется инструкция goto finish, сообщающая интерпретатору о необходимости перейти к метке finish.

Добавить комментарий

Имя:
Текст комментария: