Что такое тернарный оператор в PHP простыми словами
Оглавление:
Синтаксис
Сокращенный вариант оператора
Цепочки
Плюсы перехода
Примеры
Вывод
Тернарный оператор (по сути — условный) в PHP — это сокращенный способ написания конструкции типа if-else. Он позволяет оценить условие и вернуть значение A, если условие истинно, и значение В — когда оно ложно. Этот оператор можно использовать в различных ситуациях, когда необходимо принять решение на основе какого-либо условия.
Термин тернарный происходит от того, что он использует три операнда: выражение, значение1, значение2.
Синтаксис
Мы уже поняли, что смысл тернарного оператора — в сокращении. И вместо того, чтобы каждый раз писать что-то наподобие этого:
<?php
if (condition) {
$result = value2;
} else {
$result = value3;
}
…можно задействовать такую краткую конструкцию:
$result = condition ? value0 : value1;
Как это работает
Вот основные этапы:
-
PHP оценивает условие (condition). Если оно истинно, правое выражение возвращает первое значение (value0); если ложно — возвращает второе значение (value1).
-
PHP присваивает результат правого выражения переменной $result.
Таким образом, вышеуказанный подход позволяет сделать код более лаконичным, значительно сократив его объём.
Сокращенный тернарный оператор
Начиная с PHP версии 5.3 и выше появилась возможность задействовать сокращенный вариант. Синтаксис у него следующий:
$result = $initial ?: $default
Примечание:
-
$initial представлен в булевом контексте.
-
Если $initial будет TRUE — это же значение будет присвоено переменной $result.
-
Если $initial будет FALSE — переменная получит значение по умолчанию (напомним, это $default).
Пример использования сокращенного варианта
Взгляните на этот не слишком сложный пример:
<?php
$path = ’/contacts’;
$url = $path ?: ’/’;
echo $url; // /contacts
Примечания:
-
Если $path пуст, то переменной $url будет присвоена строка '/'.
-
Если переменная $path не пуста, то в $url будет записано значение из $path.
Вывод:
/contacts
Цепочки операторов
В PHP можно соединять тернарные операторы, вводя круглые скобки.
Изучение операторов принесет вам пользу в долгосрочной перспективе. Ну а чтобы пользы было ещё больше — успейте записаться на курс бэкенд-разработчик от Loft.
Допустим, нам нужно демонстрировать пользователю сообщение об одобрении или отказе в получении кредита. Посмотрите на этот пример:
<?php
$eligible = true;
$has_credit = false;
$message = $eligible
? ($has_credit
? ’Вы можете воспользоваться кредитом’
: ’Вы не можете воспользоваться кредитом’)
: ’Нет права на кредитование’;
echo $message;
Мы использовали троичный оператор для решения вышеуказанной задачи.
Важно: цепочки таких операторов могут значительно перегружать код визуально, особенно, если их очень много. В качестве решения можно вернуться к стандартным конструкциям типа if...else или if...elseif.
Преимущества
Такой оператор плох тем, что провоцирует на слишком частое использование. Появляется грязь, код становится нечитабельным или просто кривым.
Тем не менее, конструкции с таким оператором в PHP могут быть вполне читаемыми и красивыми. Но при условии, что подразумевается булево выражение и его смысл не допускает двойных или тройных трактовок.
Плюсы или когда тернарный оператор оправдан (не только PHP)
Идеален для коротких тегов в PHP:
>Female
>Male
Хорошо подходит для переключателей в JavaScript / jQuery:
let el = $("#test");
$(el).is(’:visual) ? $(el).hide("weak") : $(el).fadeIn("vivid");
Хорошо подходит для заданий, когда имя переменной может принимать различные типы:
$var = ($foo->isFoo()) ? ’Успешно!’ : false;
Примеры в PHP
Предположим, нужно вывести ссылку для входа, если пользователь еще не вошел, и ссылку выхода — если пользователь уже авторизован.
Для решения вышеуказанного сценария проще всего использовать оператор if...else. Например, вот таким образом:
<?php
$is_user_logged_in = false;
if ($is_user_logged_in) {
$title = ’Logout’;
} else {
$title = ’Login’;
}
Код можно несколько сократить и сделать более читабельным, если ввести тернарный оператор:
<?php
$is_user_logged_in = false;
$title = $is_user_logged_in ? ’Logout’ : ’Login’;
В сценарии выше (и других подобных сценариях) часто приходится работать с очень длинными строками. Решить эту проблему можно, например, при помощи разбивки:
<?php
$is_user_logged_in = false;
$title = $is_user_logged_in
? 'Logout'
: 'Login';
Присвоить значение переменной на основе какого-либо условия
Например, вот таким образом:
$count = 29;
$can_watch = ($count >= 29) ? true : false;
В этом примере тернарный оператор задействован для установления истинности: значение переменной $count больше или равно 29. Если оно больше — переменная $can_watch становится равной TRUE, если меньше — значение $can_watch устанавливается равным FALSE.
Вывести сообщение на основе условия
Например, вот таким образом:
$status = ’на рассмотрении’;
echo ($status == ’одобрено’) ? ’Ваше заявление одобрено.’ : ’Ваше заявление находится на рассмотрении.’;
В примере тернарный оператор используется для вывода сообщения на основе значения переменной $status. Если $status равняется "одобрено" — будет показано сообщение: "Ваше заявление было одобрено.".
Если переменная $status равняется "на рассмотрении" — будет показано сообщение "Ваше заявление находится на рассмотрении.".
Вернуть значение из функции на основе условия
Например, вот таким образом
function get_discount($amount) {
return ($amount > 100) ? $amount * 0.9 : $amount;
}
Тернарный оператор задействован, чтобы вернуть стоимость товара с учетом акции.
-
Если значение $amount превышает 100 — происходит возврат стоимости с учётом скидки.
-
Если значение $amount не превышает 100 — происходит возврат первоначальной стоимости.
Резюме
Тернарный оператор в PHP — это сокращение конструкции if...else. Это полезный инструмент для сценариев с оценкой условия и возврата значения (на основе результата).
Если это оправдано — используйте его, чтобы сделать код более красивым и читабельным.
Хотите стать крутым и востребованным веб-разработчиком? У нас есть специализированный курс!