我经常发现自己需要使用以下逻辑模式编写代码:
$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
设置为返回的名称(如果有的话),但是如果没有,则设置一些合理的默认值。如果方法调用比 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/