我正在研究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
答案 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
答案 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