Тернарный оператор может делать все, что может оператор if / else. В некоторых случаях это может обеспечить краткость и выразительность, но будьте осторожны: им легко злоупотреблять.
Мне нравится проверка на нуль:
$foo = (is_null($bar)) ? 0 : $bar->someNumber();
Если моя память PHP обслуживает меня правильно, то она также может быть использована для lvalue:
((is_null($foo)) ? $bar : $foo) = $quux;
Хотя это может быть легко переопределено, например, в этом примере C ++, где он используется вместо циклов и операторов if / else:
while( ( ! printingStars) ?
( ( ! reachedMax) ?
( ( ++numberOfStars == n - 1) && (reachedMax = 1) )
: --numberOfStars ), printingStars = 1, starsLeft = numberOfStars
: ( ( ! starsLeft ) ?
printingStars = 0, (std::cout<< std::endl), 1
: --starsLeft, (std::cout<< "*"), 1 ) );
Используйте с осторожностью.