В PHP троичный оператор имеет сокращенную версию.
expr1 ? expr2 : expr3;
меняется в
expr1 ? : expr3;
Краткая версия возвращает результат expr1 в true и expr3 в false.
Это позволяет использовать классный код, который может заполнять переменные в зависимости от их текущего состояния. Например:
$employee = $employee ? : new Employee();
Если $employee == null
или оценивается как ложное по любой другой причине, приведенный выше код создаст new Employee();
В противном случае значение в $employee
будет переназначен на себя.
Я искал что-то похожее в Java, но не смог найти аналогичного варианта использования троичного оператора. Поэтому я спрашиваю, есть ли такая функциональность или что-то подобное, что может избежать одного из выражений троичного оператора, чтобы уменьшить дублирование.
Нет, нет (Тройная операция требует, по определению, три операнда)
Начиная с PHP 5.3, можно опустить среднюю часть
троичный оператор. Выражение expr1?: Expr3 возвращает expr1, если expr1
оценивается как ИСТИНА и expr3 в противном случае.
Источник: Руководство по PHP
Как и в Java, но в Java вам нужно указать оба результата:
Троичный
Оператор if-else работает с тремя операндами, производящими значение в зависимости
на правду или ложь булева утверждение. Это форма как
следующим образом: —
boolean-exp ? value1 : value2
Источники:
Java-спецификации на троичный условный оператор
Также имейте в виду, что, в отличие от 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
Других решений пока нет …