В качестве идеи для очередной статьи я решил выбрать тернарные операторы в PHP, а точнее, их особенность в этом языке. Всё, о чём пойдёт речь ниже, описано в официальной документации, поэтому если вы владеете знанием английского языка и перед написанием кода читаете официальную документацию, эта статья навряд ли будет вам интересной. Ну, поехали.
Я постоянно произвожу рефакторинг (что это?) кода на своём проекте, поэтому изучениенового существующего функционала языка программирования и постоянные поиски более удобных и компактных методов записи стали для меня привычкой. Я очень часто использую условные операторы if () {...} else {...}, и большая их часть предназначена для простого вывода на страницу того или иного результата. Как мне казалось, такое использование условных операторов крайне не оправдано и код наверняка можно сократить. И на этот счёт я был прав.
В PHP есть такое понятие как тернарный оператор. По сути, тернарные операторы выполняют те же действия, что и конструкции вида
С использованием тернарного оператора при значениях истина и ложь мы разобрались, а можно ли использовать его при трёх и более условиях? Можно!
Я постоянно произвожу рефакторинг (что это?) кода на своём проекте, поэтому изучение
В PHP есть такое понятие как тернарный оператор. По сути, тернарные операторы выполняют те же действия, что и конструкции вида
if (true) echo $var1; else echo $var2;Записать это же выражение в более компактном виде можно так
echo (true) ? $var1 : $var2;С помощью него можно также и присвоить переменной определённое значение в зависимости от условия
$var3 = (true) ? $var1 : $var2;Или в таком виде, когда помимо других переменных в переменную добавляется что-то ещё
$var3 = 'Немного текста ... '.((true) ? $var1 : $var2);При использовании if () {} else {} эта запись выглядела бы так (эквивалентна ей)
if (true)В производительности тернарные операторы проигрывают операторам if и else, хоть и самую малость: при 10 миллионах операций заметно, что тернарные операторы работают медленнее своей альтернативы примерно на одну шестую/восьмую от времени выполнения скрипта. Но поскольку на моём проекте нет циклов с таким числом итераций, я смирился с незначительной и незаметной на глаз медлительностью, начав применять тернарный оператор при каждом удобном случае.
$var 3 = 'Немного текста ... '.$var1;
else
$var 3 = 'Немного текста ... '.$var2;
С использованием тернарного оператора при значениях истина и ложь мы разобрались, а можно ли использовать его при трёх и более условиях? Можно!
if ($var == 1)Всё это можно записать в более компактном виде так
$arr[] = 'a';
else if ($var == 2)
$arr[] = 'b';
else
$arr[] = 'c';
echo ($var == 1) ? 'a' : (($var == 2) ? 'b' : 'c');Следует обратить внимание на расстановку круглых скобок. Запись выше не эквивалентна такой записи
echo ($var == 1) ? 'a' : ($var == 2) ? 'b' : 'c';Это описано в официальной документации. Вот простой пример, наглядно демонстрирующий необходимость ограничивающих скобок
$var = 1;Собственно, именно этот факт стал для меня скрытой особенностью языка. На деле я пока не использую тернарный оператор для трёх и более условий, так как тут уже начинает страдать удобство чтения кода. Вполне вероятно, кому-то эта заметка может пригодиться.
echo ($var == 1) ? 'a' : (($var == 2) ? 'b' : 'c'); // a
echo ($var == 1) ? 'a' : ($var == 2) ? 'b' : 'c'; // b
Комментариев нет:
Отправить комментарий