我正在深入研究 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';
有人对这个主题有任何精确度吗?
原文由 elkolotfi 发布,翻译遵循 CC BY-SA 4.0 许可协议
它是 php 7.0 中添加的“空合并运算符”。它如何工作的定义是:
所以它实际上只是
isset()
在一个方便的运算符中。这两个是等价的1 :
文档: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有区别:在
??
的情况下,第一个表达式只计算一次,而不是? :
,其中表达式首先在条件部分计算,然后是第二个时间在“答案”部分。