是否可以使用空合并运算符执行此操作?

时间:2019-02-26 08:44:53

标签: php

使用isset(),您可以执行以下操作:

$foo = [];
$baz = [];
$bar = isset($foo['bar'], $baz[$foo['bar']]) ? $baz[$foo['bar']] : '';

是否可以通过空合并实现相同的目标?

$bar = ($foo[$bazz['foo']]) ?? ''; //Undefined variable: bazz

我期望$bar是:

$bar = '';

??: Null coalescing operator

3 个答案:

答案 0 :(得分:1)

如果不确定是否存在变量/数组元素,则需要使用isset以避免错误。您可以使用@运算符来避免显示错误消息,但是错误将不会显示,但仍然会发生。尽可能避免使用@运算符。

答案 1 :(得分:1)

该问题的简单答案是,仅由于运算符仅将1个参数传递给isset()且需要传递多个参数,您就无法使用??实现相同的行为。

使用@的解决方案确实很糟糕,应该避免。因此,我建议甚至使用isset()甚至可以提高代码的可读性。

答案 2 :(得分:1)

您必须两次使用??运算符。

$foo = [];
$baz = [];
$bar = $baz[$foo['bar'] ?? ''] ?? '' ;

See it in action on 3v4l.org