В PHP тернарный оператор имеет короткую версию.
expr1 ? expr2 : expr3;
меняется на
expr1 ? : expr3;
Краткая версия возвращает результат expr1 в true и expr3 на false. Это позволяет использовать классный код, который может заполнять переменные в зависимости от их текущего состояния. Например:
$employee = $employee ? : new Employee();
Если $employee == null
или имеет значение false для любой другой причины, приведенный выше код создаст new Employee();
В противном случае значение в $employee
будет переназначено самому себе.
Я искал что-то подобное на Java, но я не мог найти подобный вариант использования тернарного оператора. Поэтому я спрашиваю, существует ли такая функциональность или что-то подобное, что позволяет избежать одного из выражений тернарного оператора, чтобы уменьшить дублирование.
Нет, нет. (Тройная операция требует, по определению , трех операндов)
Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.
Источник: Руководство PHP
Как и в Java, но в Java вам нужно указать оба результата:
Тройной оператор if-else работает с тремя операндами, производящими значение, зависящее от правды или ложности булевого утверждения. Это форма:
boolean-exp ? value1 : value2
Источники:
Спецификации Java для тернарного условного оператора
Официальная документация по Java
Блоги Java.net
Также имейте в виду, что, в отличие от Java и любого другого популярного языка с аналогичным оператором, ?:
Остается ассоциативным в PHP. Итак, это:
<?php $arg = "T"; $vehicle = ( ( $arg == 'B' ) ? 'bus' : ( $arg == 'A' ) ? 'airplane' : ( $arg == 'T' ) ? 'train' : ( $arg == 'C' ) ? 'car' : ( $arg == 'H' ) ? 'horse' : 'feet' ); echo $vehicle;
печатает horse
вместо train
(что и следовало ожидать в Java)
Источники:
http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/#operators