Более краткое тернарное выражение?

Мне часто приходится писать код со следующим логическим шаблоном:

$foo = isset($bar) ? $bar : $baz;

Я знаю о синтаксисе ?::

$foo = $bar ?: $baz;

... что на первый взгляд кажется тем, что я ищу; однако он создает неопределенный индекс уведомления, когда $barне установлен. Он также использует ту же логику, что и empty(), что означает, что «пустые» значения, такие как FALSE, 0, "0"и т. д., не проходят. Следовательно, это не совсем эквивалентно.

Есть ли более короткий способ написания этого кода без выдачи уведомления, когда $barне установлен?

Изменить:

Чтобы было немного понятнее , почему я ищу сокращенный синтаксис, вот лучший пример:

$name = isset($employee->getName())
      ? $employee->getName()
      : '<unknown>';

В этом случае $employeeможет быть объектом из сторонней -библиотеки, и вполне допустимо, что его nameможет быть NULL. Я хотел бы установить для переменной $nameвозвращаемое имя (, если оно есть ), но какое-то разумное значение по умолчанию, если его нет.

Если вызов метода сложнее, чем просто геттер, то пример становится еще более многословным,так как мы должны кэшировать результат:

$bar = $some->reallyExpensiveOperation();
$foo = isset($bar) ? $bar : $baz;
6
задан FtDRbwLXw6 21 July 2012 в 14:30
поделиться