Время чтения ~ 10 сек. / 38 просмотров / 0 комментариев / Январь 14, 2024, 17:47

В этом уроке вы узнаете, как использовать тернарный оператор в 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.
  • Используйте тернарный оператор, когда это делает ваш код более лаконичным и читаемым.
Теги:
php
Конструкция if elseif - PHP
Конструкция switch - PHP
Целое число (Integer) - PHP
Январь 05, 2024, 21:45
В этом уроке вы узнаете о типе PHP integer, который представляет целые числа в PHP.
var_dump - PHP
Январь 03, 2024, 21:21
В этом уроке вы узнаете, как использовать функцию PHP var_dump() для вывода информации о переменной.
Логический тип (Boolean) - PHP
Январь 05, 2024, 15:41
В этом уроке вы узнаете о логическом типе данных и логических значениях PHP.
Привет, Мир! на PHP
Декабрь 27, 2023, 22:33
В этом уроке вы узнаете, как выполнить сценарий, который выводит сообщение "Привет, Мир!" в веб-браузере и в командной строке.
Цикл for - PHP
Март 04, 2024, 17:51
В этом уроке вы узнаете об операторе for в PHP для многократного выполнения блока кода.