Мне часто приходится писать код со следующим логическим шаблоном:
$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;