我经常发现自己需要使用以下逻辑模式编写代码:
$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)