PHP 7.4中新的空合并赋值?? =运算符是什么

时间:2019-11-29 10:07:27

标签: php php-7.4

我刚刚看了有关即将推出的PHP 7.4功能的视频,并看到了这个??=新操作员。我已经知道??运算符。有什么不同?

5 个答案:

答案 0 :(得分:6)

来自docs

  

等于或等于=运算符是赋值运算符。如果left参数为null,则将right参数的值分配给left参数。如果该值不为null,则什么都不做。

示例:

// The folloving lines are doing the same
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names, the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';

因此,如果以前从未分配过值,则基本上只是一种简写方式。

答案 1 :(得分:3)

空合并分配运算符是分配空合并运算符结果的一种简便方法。

release notes官方提供的示例:

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}

答案 2 :(得分:2)

最初在 PHP 7 中发布,允许开发人员简化与三元运算符结合的isset()检查。例如,在PHP 7之前,我们可能有以下代码:

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');

PHP 7 发布后,我们可以将其编写为:

$data['username'] = $data['username'] ?? 'guest';

现在,当发布 PHP 7.4 时,可以将其进一步简化为:

$data['username'] ??= 'guest';

一种不起作用的情况是,如果您想为另一个变量分配值,那么您将无法使用此新选项。因此,尽管这很受欢迎,但可能会有一些有限的用例。

答案 3 :(得分:1)

示例Docs

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}

答案 4 :(得分:1)

空合并分配运算符链接:

$a = null;
$b = null;
$c = 'c';

$a ??= $b ??= $c;

print $b; // c
print $a; // c

Example at 3v4l.org