在PHP中,我发现自己经常编写这样的代码:
$a = isset($the->very->long->variable[$index])
? $the->very->long->variable[$index]
: null;
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?最好是一个不需要我写$the->very->long->variable[$index]两次的.
Mor*_*ing 34
一个更新,因为PHP 7现在已经出局,并且在这一点上是一个改变游戏规则的人.以前的答案是关于PHP 5.
PHP 7解决了这个问题.因为你说在PHP中经常写这个是真的,这绝对不是优雅的.
在PHP 7中出现了Null Coalesce Operator(RFC),它是isset三元条件的完美缩写.
它的目标是取代这种类型的条件:
$var = isset($dict['optional']) ? $dict['optional'] : 'fallback';
Run Code Online (Sandbox Code Playgroud)
那个:
$var = $dict['optional'] ?? 'fallback';
Run Code Online (Sandbox Code Playgroud)
更好的是,null coalesce运算符是可链接的:
$x = null;
# $y = null; (undefined)
$z = 'fallback';
# PHP 7
echo $x ?? $y ?? $z #=> "fallback"
# PHP 5
echo isset($x) ? $x : (isset($y) ? $y : $z)
Run Code Online (Sandbox Code Playgroud)
null coalesce运算符的行为如下isset():如果出现以下情况,则采用主题变量的值:
只是PHP初学者的一个注释:如果你使用三元条件,但你知道主题变量必须定义(但你想要为falsy值回退),那就是Elvis运算符:
$var = $dict['optional'] ?: 'fallback';
Run Code Online (Sandbox Code Playgroud)
使用Elvis运算符,如果$dict['optional']是无效偏移或$dict未定义,您将收到E_NOTICE警告(PHP 5和7).这就是为什么在PHP 5中,人们正在使用可怕的isset a?a:b当他们不确定输入时形成.