Полный цикл в digital

Тернарный оператор в PHP

Существует распространенная в программировании ситуация, когда в случае выполнения некоторого условия переменной необходимо присвоить одно значение и в случае невыполнения этого условия другое значение. В следующем примере переменной $min присваивается наименьшее из значений $foo и $bar c помощью конструкции if else:

<?
$foo = 1;
$bar = 2;
if ($foo < $bar) {
  $min = $foo;
}
else {
  $min = $bar;
}

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

  1. ?
  2. :

Синтаксис тернарного оператора

Первым делом интерпретатор PHP вычисляет значение условия, если оно возвращает true, переменной присваивается значение выражения находящегося по левую сторону от двоеточия, в данном случае выражение1. Если условие возвращает false, переменной присваивается значение выражения находящегося справа от двоеточия, в данном случае выражение2. Скобки вокруг условного выражения не обязательны, но их довольно часто употребляют для более легкого визуального восприятия тернарного оператора. Тернарные выражения вычисляются слева направо.

Обычный тернарный оператор

Синтаксис:

$variable = (условие) ? значение_если_истина : значение_если_ложь;

С помощью тернарного оператора можно записать предыдущий пример следующим образом:

<?
$foo = 1;
$bar = 2;
$min = ($foo < $bar) ? $foo : $bar;

Сначала проверяется результат работы условного выражения, если условие вернет значение true переменной $min присвоиться значение переменной $foo, если false значение переменной $bar.

В данном случае переменная $min будет равна 1.

Краткий тернарный оператор

Синтаксис:

$variable = (условие) ?: значение_если_ложь;

Краткий тернарный оператор ?: работает почти так же, как и обычный тернарный оператор, но он пропускает часть «если истина», возвращая тестовое выражение в случае истины.

<?
$name = 'Александр';
$displayName = $name ?: 'Гость';

В данном случае переменная $displayName будет равна Александр.

Оператор объединения с null или оператор Null coalescing

Синтаксис:

$variable = значение1 ?? значение2 ?? значение3;

Оператор ?? проверяет, является ли значение NULL или не установлено, и возвращает первое не NULL значение из списка.

<?
$foo = 1;
$bar = 2;
$data = $test ?? $foo ?? $bar;

В данном случае переменная $data будет равна 1, по причине что переменная $test не установлена.

Вложенный тернарный оператор

<?
$code = 0;
// следующий код на первый взгляд должен выводить 'Успешно', однако он выведет 'Предупреждение' происходит это потому что тернарное выражение вычисляется слева направо
$msg = ($code == 0) ? 'Успешно' : ($code == 1) ? 'Предупреждение' : 'Ошибка';
// разберем почему так происходит, первое выражение ($code == 0) ? 'Успешно' возвращает строку 'Успешно', далее эта строка преобразуется в булево значение true и вычисляется второе выражение, т.е. вычисляется уже (true) ? 'Предупреждение' : 'Ошибка'. Таким образом возвращается значение 'Предупреждение' второго (вложенного) выражения
echo $msg;
// чтобы предыдущий код работал корректно, нужно пользоваться скобками, перепишем пример так, чтобы работал как задумано
$msg = ($code == 0) ? 'Успешно' : (($code == 1) ? 'Предупреждение' : 'Ошибка');
echo $msg;

Несмотря на то, что тернарные операторы могут быть вложенными, использовать их таким образом не рекомендуется. Поэтому вложенные тернарные операторы лучше заменить на конструкцию if-else или switch-case.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!