More concise ternary expression?

Viewed 221

I often find myself needing to write code with the following logical pattern:

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

I know about the ?: syntax:

$foo = $bar ?: $baz;

...which, on the surface, appears to be what I'm looking for; however, it throws an undefined notice index when $bar is not set. It also uses the same logic as empty(), meaning that "empty" values like FALSE, 0, "0", etc. don't pass. Hence, it's not really equivalent.

Is there a shorter way of writing that code without throwing a notice when $bar is not set?

Edit:

To make it a bit more clear why I'm looking for a shortcut syntax, here's a better example:

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

In this case, $employee might be an object from a 3rd-party library, and it might be a valid scenario that its name might be NULL. I'd like to set variable $name to the returned name (if there is one), but some sensible default if there isn't.

If the method call is more complex than just a getter, then the example becomes even more verbose, since we have to cache the result:

$bar = $some->reallyExpensiveOperation();
$foo = isset($bar) ? $bar : $baz;
3 Answers
Related