双问号(??)运算符在PHP中是什么意思

时间:2018-12-04 10:18:12

标签: php operator-keyword symfony4

我正在研究Symfony框架(第4版)代码,并发现这种代码的安全性:

$env = $_SERVER['APP_ENV'] ?? 'dev';

我不太确定这实际上是做什么的,但我想它会扩展为:

$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';

或者也许:

$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';

有人对这个主题有什么精确度吗?

编辑:

对所有回答问题的人:谢谢 对于所有将我的问题标记为否定的人,因为已经有一个类似的问题(PHP ternary operator vs null coalescing operator):

两个问题都非常相似。但是,每个人都很难想象“ ??”被称为合并运算符。

否则,我可以在官方文档中轻松找到它:

http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

但是,对于不知道此功能已在php 7中添加的人,更可能键入:

“ php ??运算符”或“ php双问号运算符”

这就是为什么我的问题具有附加值的原因。

请您重新考虑您的负面反馈。 谢谢

关于, Epixilog

3 个答案:

答案 0 :(得分:61)

这是php 7.0中添加的“空合并运算符”。其工作方式的定义是:

  

如果存在并且不为NULL,则返回其第一个操作数;否则,它将返回其第二个操作数。

因此,它实际上只是方便使用的运算符中的isset()

这两个是等效的:

$foo = $bar ?? 'something';
$foo = isset($bar) ? $bar : 'something';

文档:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce

在PHP7的新功能列表中:http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

原始RFC https://wiki.php.net/rfc/isset_ternary

答案 1 :(得分:8)

$myVar = $someVar ?? 42;

等同于:

$myVar = isset($someVar) ? $someVar : 42;

答案 2 :(得分:1)

$x = $y ?? 'dev'

如果设置了y,则是x = y的简写,否则x ='dev'

还有

$x = $y =="SOMETHING" ? 10 : 20

表示如果y等于'SOMETHING',则x = 10,否则x = 20