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