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

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

我知道?:语法:
$foo = $bar ?: $baz;

...从表面上看,这似乎是我在寻找的东西;但是,当未设置$bar时,它将引发未定义的通知索引。它还使用了与empty()相同的逻辑,这意味着FALSE0"0"等“空”值不会通过。因此,它并不是真正等效的。

当未设置$bar时,是否有一种较短的编写代码的方式而不会引起通知?

编辑:

为了更清楚地说明我为什么要查找快捷方式语法,这是一个更好的示例:
$name = isset($employee->getName())
      ? $employee->getName()
      : '<unknown>';

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

如果方法调用比 getter 更复杂,那么该示例将变得更加冗长,因为我们必须缓存结果:
$bar = $some->reallyExpensiveOperation();
$foo = isset($bar) ? $bar : $baz;

最佳答案

当您明确预定义变量或将对象与魔术 setter/getter 一起使用时,我只会使用简写三元语法。这是一个非常基本的示例,说明我通常在哪里使用短手三元语法

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

$foo = new Foo();
$bar = $foo->baz ?: 'default';

关于php - 更简洁的三元表达?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11588885/

10-16 17:01