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

Тернарный оператор - еще один оператор условия. В основном используется когда необходимо присвоить переменной или вывести на экран одно из двух значений. Благодаря своей конструкции - это самый быстрый оператор условия и самый компактный.

Синтаксис тернарный оператора очень прост: (условие) ? 'значение 1' : 'значение 2'. Теперь по порядку - если условие истинно то возвращается "значение 1", если условие ложно - то возвращается "значение 2".

Пример тернарного оператора

<?php
$a = 1;
$b = 2;

$c = ($a == $b) ? 'А равно Б' : 'A не равно Б';

// а вот если использовать if else
if($a == $b )
{
  $c = 'А равно Б';
}
else
{
  $c = 'А не равно Б';
}
?>

Как видно - тернарный оператор гораздо компактнее оператора if else;

Внимание: необходимо учесть, что тернарный оператор это выражение и рассматривается как результат от выражения, а не как переменная. Это особенно важно, если необходимо вернуть переменную по ссылке. Выражение return $с == 10 ? $a : $b; не сработает в функции, которая возвращает значение по ссылке. К тому же, более поздних версиях PHP, также будет выдано предупреждение.

Еще одно замечание: не стоит нагромождать данный оператор вложенными условиями. Т.к. язык PHP не очевиден в своем поведении

<?php
// вроде должно вывести 'true'
echo (true?'true':false?'a':'b');

// но выведет a
// это из-за того что выражения читаеются слева на право

// добавим скобки и станет понятней
echo ((true ? 'true' : false) ? 'a' : 'b');

// видите - первое выражение вычисляется в 'true', 
// которое вычисляется в (bool)true, и возвращает истинную ветвь
// второго тернарного выражения.

?>

Начиная с версии 5.3 тенарный оператор несколько сократили для большего удобства

<?php
$b = $a ?: "default";

// тоже самое, что и
$b = $a ? $a : "default";

?>

т.е. переменная $a будет равна переменной $b если переменная $b имеет значение true. (А true, это любое значение не равное false, 0, null, '')

Начиная с версии 7.0 появился еще один удобный способ использования тернарного оператора

<?php
// получаем номер страницы при пагинации
$page = $_GET['page'] ?? "Другое значение: например 1";

// тоже, что и
$page = isset($_GET['page']) ? $_GET['page'] : "Другое значение: например 1";

?>

Очень удобно, если нужно получить значение переменной, но при этом проверить - существует ли эта переменная

Список уроков