更简洁的三元表达?

FtD*_*Xw6 6 php ternary-operator

我经常发现自己需要使用以下逻辑模式编写代码:

$foo = isset($bar) ? $bar : $baz;
Run Code Online (Sandbox Code Playgroud)

我知道?:语法:

$foo = $bar ?: $baz;
Run Code Online (Sandbox Code Playgroud)

......从表面上看,它似乎正是我所寻找的; 但是,如果$bar未设置,它会抛出未定义的通知索引.它也使用了相同的逻辑empty(),这意味着这样的"空"的价值观FALSE,0,"0"等不及格.因此,它并不是真正等同的.

是否有一种更短的编写代码的方式,而没有在$bar未设置时发出通知?

编辑:

为了让我更清楚为什么我在寻找快捷语法,这里有一个更好的例子:

$name = isset($employee->getName())
      ? $employee->getName()
      : '<unknown>';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,$employee可能会从第三方库中的对象,这可能是它的一个有效的方案name可能NULL.我想将变量设置$name为返回的名称(如果有的话),但如果没有,则设置一些合理的默认值.

如果方法调用比只是一个getter更复杂,那么这个例子变得更加冗长,因为我们必须缓存结果:

$bar = $some->reallyExpensiveOperation();
$foo = isset($bar) ? $bar : $baz;
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 3

当您显式预定义变量或使用带有魔术吸气剂的对象时,我只会使用简写三元语法。这是一个非常基本的示例,我通常会使用简写三元语法

class Foo {
    public function __get($name) {
        return isset($this->{$name}) ? $this->{$name} : '';
    }
}

$foo = new Foo();
$bar = $foo->baz ?: 'default';
Run Code Online (Sandbox Code Playgroud)