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

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

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

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

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

  1. ?
  2. :

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

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

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

У тернарного оператора есть возможность не писать его среднюю часть:

<?
$a1 = 5;
echo (($a1) ?: 10);

Выражение ($a1) ?: 10 возвращает значение переменной $a1, если $a1 имеет значение TRUE и 10 в противном случае.

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

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

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

<?
$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.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг