(??=) 双问号和等号,那个运算符有什么作用?

Gre*_*fer 6 operator-keyword php-7.4

一旦我偶然发现带有 operator 的 php7 代码??=。我试图搜索,它清楚地做了什么,但无法轻松找到。我试图读出 php 操作符,甚至大多数官方资源都有所有操作符的描述,甚至像.=,这样的复合操作符+=,但没有描述??=

例如,PHP Operators保留了所有运算符的描述,如直接形式 ( ., +),复合形式 ( .=, +=),但没有??=,因此我首先感到困惑并认为这完全是另一回事。问题简单明了,但整个案例有点混乱,这就是为什么我试图帮助像我这样的其他 php 初学者

Gre*_*fer 28

所以最终我决定编写代码并亲自观察 - 它是如何工作的以及它做了什么。

在 PHP7.0 中添加了Null Coalescing 运算符

$username = $_GET['username'] ?? 'not passed'; 
Run Code Online (Sandbox Code Playgroud)

我们的 $username 将具有 $_GET['username'] 值 - 如果它存在且不为空,否则 $username 将获得“未传递”字符串。但有时您可能会遇到一种情况,当您需要检查变量本身是否存在且不可为空时:

$first_test = $first_test ?? 'not started';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以使用空合并运算符的复合版本 - '??='

$first_test ??= 'not started';
Run Code Online (Sandbox Code Playgroud)

就是这样,只是“??”的复合版本 对于检查自身变量的情况。

  • `??=` 仅在 php 7.4 及更高版本中添加 - [演示](https://3v4l.org/GTN0r) - [文档](https://www.php.net/manual/en/migration74.new -features.php#migration74.new-features.core.null-coalescing-assignment-operator) (6认同)