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

emi*_*mix 4 php php-7.4

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

Ram*_*mki 22

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

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');
Run Code Online (Sandbox Code Playgroud)

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

$data['username'] = $data['username'] ?? 'guest';
Run Code Online (Sandbox Code Playgroud)

然而,现在,当PHP 7.4发布时,这可以进一步简化为:

$data['username'] ??= 'guest';
Run Code Online (Sandbox Code Playgroud)

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

  • 在应得的信用处给予信用。整个答案是从[此处](https://codular.com/php-7-4-null-coalescing-assignment-operator)复制/粘贴的。 (7认同)

小智 7

空合并赋值运算符链接:

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

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

print $b; // c
print $a; // c
Run Code Online (Sandbox Code Playgroud)

3v4l.org 上的示例

  • 该示例可以通过空合并运算符“??”轻松处理,因为所有变量都已定义。空合并*赋值*运算符的要点是它可以处理未定义的变量。因此,您可以删除将空值分配给 $a 和 $b 的前两行,代码仍然可以工作。 (3认同)

Pav*_*int 6

文档

合并等于或?? =运算符是赋值运算符。如果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';
Run Code Online (Sandbox Code Playgroud)

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

  • 看起来我们在官方文档中发现了一个错字。“那些喜欢的台词...” (3认同)
  • 两条线做的“相同”并不是 100% 准确,在第二种情况下,左侧仅评估一次,因此效率更高 (2认同)

Nic*_*rth 6

空合并赋值运算符是分配空合并运算符结果的一种简写方式。

官方发行说明中的一个示例:

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