我经常发现自己需要使用以下逻辑模式编写代码:
$foo = isset($bar) ? $bar : $baz;
我知道?:
语法:
$foo = $bar ?: $baz;
...从表面上看,这似乎是我正在寻找的;但是,如果$bar
未设置,它会引发未定义的通知索引。它还使用与 相同的逻辑empty()
,这意味着像FALSE
、0
、"0"
等“空”值不会通过。因此,它并不是真正等效的。
是否有更短的方法来编写该代码而不在$bar
未设置时发出通知?
编辑:
为了更清楚地说明我为什么要寻找快捷语法,这里有一个更好的例子:
$name = isset($employee->getName())
? $employee->getName()
: '<unknown>';
在这种情况下,$employee
可能是来自第 3 方库的对象,并且name
可能是NULL
. 我想将变量设置$name
为返回的名称(如果有的话),但如果没有的话,一些合理的默认值。
如果方法调用比 getter 更复杂,那么这个例子就会变得更加冗长,因为我们必须缓存结果:
$bar = $some->reallyExpensiveOperation();
$foo = isset($bar) ? $bar : $baz;