我在深入研究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';

有人对这个主题有什么准确的认识吗?

推荐答案

它是PHP7.0中添加的"空合并运算符".其工作原理的定义如下:

如果第一个操作数存在且不为空,则返回第一个操作数;否则返回第二个操作数.

所以一个方便的操作员实际上只有isset()个.

这两者相当于1:

$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

和原始RFChttps://wiki.php.net/rfc/isset_ternary


EDIT:因为这个答案有很多观点,所以没有什么澄清:

1有一个区别:在??的情况下,第一个表达式只计算一次,而不是? :,其中表达式首先在条件部分计算,然后在"答案"部分计算第二次.

Php相关问答推荐

输入手写CSV时在PHP中进行日期判断

如何使用属性#[Embedded]嵌入带有规则的对象集合?

Mysqli_stmt::Execute():结果字段元数据中存在过早的EOF

Symfony Api平台:按自定义实体方式排序结果

如何删除Foreach语句中的重复值?

按与WooCommerce管理顺序列表中的特定字符串不匹配的特定元值筛选订单

如何在laravel中使用script type= text/html/script

在指定的约束内使用随机量填充数据集

使用CODIGNITER3中的OR和AND子句进行查询

execute_query 和prepare+execute 有什么区别?

使用 PHP,我可以将 foreach 语句放入瞬态中吗?

Symfony:从控制器内部调用自定义命令

标签打印机的 CSS

Golang - Html 模板:如何创建导航项 - 子菜单?我找不到怎么做

获取 Shopware 6 集合元素的值,PHP

加载 Xdebug PHP 7.4.0 失败

Laravel 发送邮箱问题 Swift_TransportException

使用其ID查询和捕获与订单相关的其他详细信息的shopware 6方法

使用 Eloquent 更新现有的外键值

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)