Тот кто серьезно изучает php постоянно должен совершенствовать свои знания, изучать новые функции и возможности этого языка программирования. Сегодня речь пойдет о тернарном операторе, который может повстречаться на пути новичка.
Если говорить кратко, то такой оператор является сокращением записи if() ... else ...
Общий синтаксис выглядит так: $a = (условие) ? $b : $c;
Что переводится как, если условие в скобках будет выполнено (true), то переменной $a будет присвоено значение переменной $b, а если нет, то $c
Пример:
$test = 'сто';
$a = ($test == 'сто') ? 'да' : 'нет';
echo $a; //выведет да
Так как условие у нас выолняется, то $a будет равно значению "да". Последние две строки можно было своместить вот так: echo ($test == 'сто') ? 'да' : 'нет'; Ведь мы все равно ставили переменную $a на печать и дополнительно ее задавать не нужно.
Тернарный оператор на практике
В своих скриптах я не часто исользую тернарные операторы, но иногда они просто не заменимы. Например, представьте форму, в которой есть input поля. Бывает, что пользователь не верно вводит капчу и чтобы не потерять уже им введенные данные (например поля имя, логин) я использую обратную передачу $_POST значений в value с таким условием: echo (isset($_POST['name'])) ? $_POST['name'] : 'Введите имя'; Т.е. если пользователь что-то вводил в поле, он его не потеряет при обновлении страницы, а если ничего не вводил - получит текст предупреждения.
Вложенность тернарных операторов в php
Особенностью операторов if является возможность задавать условия типа else if. Тернарные операторы могут работать по такому же принципу. Посмотрите два примера, сначала со стандартным if, а затем с тернарным оператором:
//if else
$zn = 'Два';
if($zn == 'Сто') echo 'Да = Сто';
else if($zn == 'Два') echo 'Да = Два';
else echo 'По умолчанию';
//тернарный оператор
$zn = 'Два';
echo ($zn == 'Сто') ? 'Да = Сто' :
(($zn == 'Два') ? 'Да = Два' :
'По умолчанию');
Последний пример является аналогом if оператора. Проверки идут так: в первых скобках $zn не равен "Сто", поэтому обрабатывается значение после двоеточия, в котором вторые скобки (аналог else if) с новой проверкой, где $zn действительно равен "Два" - срабатывает условия и выводится значение "Да = Два". Если $zn нигде не выполнил бы условий, то вывелось бы "По умолчанию".
Вот такие они тернарные операторы одновременно простые и сложные. Вложенность, как в последних примерах не рекомендую использовать, так как это запутывает код. Еще одним минусом таких операторов по сравнению с if является отсутствие возможности использования фигурных скобок, чтобы можно было сделать несколько действий сразу, если бы условие выполнилось или нет.
Поэтому тернарные операторы надо использовать в простых случаях, в не сложных задачах присвоения переменной или вывода ее значения.
//тернарный оператор
$zn = 'Два';
echo ($zn == 'Сто') ? 'Да = Сто' :
($zn == 'Два') ? 'Да = Два' :
'По умолчанию';
тут не совсем верно будет, сейчас не зависимо от того что стоит в переменной $zn Сто или Два результат будет один и тот же 'Да = Два'.
//тернарный оператор
$zn = 'Сто';
echo ($zn == 'Сто') ? 'Да = Сто' :
($zn == 'Два') ? 'Да = Два' :
'По умолчанию';
Это происходит из-за того что на первое условие мы получаем ответ true, а второе условие выглядит уже не таким образом
($zn == 'Два') ? 'Да = Два' :
'По умолчанию';
а таким
true ? 'Да = Два' :
'По умолчанию';
Итог в ответе будет 'Да = Два'
Тут надо поставить еще пару скобок
$zn = 'Два';
echo ($zn == 'Сто') ? 'Да = Сто' :
(($zn == 'Два') ? 'Да = Два' :
'По умолчанию');
Спасибо за правки - поправил