Тернарный оператор - PHP
В этом уроке вы узнаете, как использовать тернарный оператор в PHP для сокращения кода и улучшения его читаемости.
Введение
Тернарный оператор — это сокращение оператора if...else
. Вместо того, чтобы писать так:
<?php
if (условие) {
$result = значение1;
} else {
$result = значение2;
}
вы можете писать так:
$result = условие ? значение1 : значение2;
Как это работает.
- Первое: PHP оценивает
условие
. Если оно истинно, выражение справа возвращаетзначение1
; в противном случае оно возвращаетзначение2
. - Второе: PHP присваивает результат выражения справа переменной
$result
.
Как видно, использование тернарного оператора позволяет сделать код более лаконичным.
Обратите внимание, что название тернарного оператора происходит от того факта, что этот оператор требует три операнда:
выражение
,значение1
,значение2
.
Примеры с тернарным оператором в PHP
Предположим, вы хотите отображать ссылку на вход, если пользователь не вошел в систему, и ссылку на выход, если пользователь уже вошел. Для этого вы можете использовать оператор if...else
следующим образом:
<?php
$is_user_logged_in = false;
if ($is_user_logged_in) {
$title = 'Выход';
} else {
$title = 'Вход';
}
В этом примере $title
будет 'Вход', потому что $is_user_logged_in
установлен в false
. Код довольно длинный. И вы можете сделать его более коротким, используя тернарный оператор следующим образом:
<?php
$is_user_logged_in = false;
$title = $is_user_logged_in ? 'Выход' : 'Вход';
Теперь код гораздо короче. Если строка слишком длинная, вы всегда можете разбить ее так:
<?php
$is_user_logged_in = false;
$title = $is_user_logged_in
? 'Выход'
: 'Вход';
Сокращенная форма тернарного оператора
Начиная с PHP 5.3, вы можете использовать сокращенную форму тернарного оператора следующим образом:
$result = $initial ?: $default;
В этом синтаксисе PHP оценивает $initial
в логическом контексте (boolean). Если $initial
истинно, PHP присваивает значение $initial
переменной $result
. В противном случае оно присваивает $default
переменной $result
.
В следующем примере используется сокращенная форма тернарного оператора для присвоения значения $path
переменной $url
, если $path
не пуст. Если $path
пуст, тернарный оператор присваивает литеральную строку ‘/’ переменной $url
:
<?php
$path = '/about';
$url = $path ?: '/';
echo $url; // /about
Вывод:
/about
Цепочка тернарных операторов
Технически вы можете соединять тернарные операторы, используя круглые скобки.
Предположим, вы хотите отображать различные сообщения, если пользователи имеют право и достаточно кредитов. В следующем примере используются два тернарных оператора в цепочке:
<?php
$eligible = true;
$has_credit = false;
$message = $eligible
? ($has_credit
? 'Можно использовать кредиты'
: 'Недостаточно кредитов')
: 'Нет прав покупать';
echo $message;
В большинстве случаев цепочка нескольких тернарных операторов делает код более сложным для восприятия. В таких случаях лучше использовать конструкции if...else
или if...elseif
.
Подытожим
- Тернарный оператор (
?:
) является сокращенной формой конструкцииif...else
. - Используйте тернарный оператор, когда это делает ваш код более лаконичным и читаемым.