如果设置了变量,则赋值
在PHP中,我发现自己经常编写这样的代码:
$a = isset($the->very->long->variable[$index])
? $the->very->long->variable[$index]
: null;
有没有更简单的方法可以做到这一点?最好是不需要我写两次的。$the->very->long->variable[$index]
在PHP中,我发现自己经常编写这样的代码:
$a = isset($the->very->long->variable[$index])
? $the->very->long->variable[$index]
: null;
有没有更简单的方法可以做到这一点?最好是不需要我写两次的。$the->very->long->variable[$index]
一个更新,因为PHP 7现在已经出来了,在这一点上是一个游戏规则的改变者;前面的答案是关于 PHP 5 的。
PHP 7 解决了这个问题。因为你说用PHP写这个是很常见的,这绝对不优雅。
在 PHP 7 中出现了空合并运算符 (RFC),它是 isset 三元条件的完美简写。
它的目标是替换这种类型的条件:
$var = isset($dict['optional']) ? $dict['optional'] : 'fallback';
通过:
$var = $dict['optional'] ?? 'fallback';
更好的是,空合并运算符是可链接的:
$x = null;
# $y = null; (undefined)
$z = 'fallback';
# PHP 7
echo $x ?? $y ?? $z #=> "fallback"
# PHP 5
echo isset($x) ? $x : (isset($y) ? $y : $z)
空合并运算符的行为与 : 在以下情况下采用主题变量的值:isset()
对于PHP初学者来说,只是一个注意事项:如果您使用三元条件,但您知道必须定义主题变量(但您希望对falsy值进行回退),则有Elvis运算符:
$var = $dict['optional'] ?: 'fallback';
使用 Elvis 运算符,如果偏移量无效或未定义,您将收到警告(PHP 5 和 7)。这就是为什么在 PHP 5 中,当人们不确定输入时,会使用可怕的 isset a ? a : b 形式。$dict['optional']
$dict
E_NOTICE