php 7.4 的空合并操作符(??)自 php 7.0 引入,未改动;它仅在左操作数为 null 或未定义时返回右操作数,不检测空字符串、0、false 等 falsy 值,且不支持右侧惰性求值。

PHP 7.4 的空合并操作符(??)本身在 PHP 7.0 就已引入,PHP 7.4 并未对其做改动。你可能想了解的是如何正确、高效地使用它,尤其在 PHP 7.4 及后续版本中结合新特性(如类型声明、属性类型、箭头函数等)发挥更大作用。
空合并操作符的基本用法
空合并操作符 ?? 用于判断左侧操作数是否为 null 或**未定义(undefined)**,若成立则返回右侧操作数;否则返回左侧操作数。它比三元运算符更安全,不会因访问未定义数组键或变量而触发 Notice。
-
$name = $_GET['name'] ?? 'Guest';—— 若$_GET['name']不存在或为null,则赋值'Guest' -
$count = $config['limit'] ?? 10;—— 安全读取配置项,默认值为10 $user = $data['user'] ?? []; // 防止 $data['user'] 不存在时出错
链式空合并:处理多层嵌套结构
可以连续使用 ?? 处理深层数组或对象属性(需配合可空访问,注意 PHP 7.4 不支持 ?->,那是 PHP 8.0+ 的空安全操作符)。在 PHP 7.4 中,推荐先确保是数组再逐层判空:
$city = $user['address']['city'] ?? $user['location']['city'] ?? 'Unknown';- 更健壮写法(避免
Notice):$city = ($user['address']['city'] ?? null) ?? ($user['location']['city'] ?? 'Unknown'); - 实际项目中建议封装成辅助函数,或升级到 PHP 8+ 使用
?->+??组合
与类型声明和默认值配合使用
PHP 7.4 支持类属性类型声明,空合并常用于构造函数或方法中提供默认值:
-
public function __construct(private string $name = '', private int $age = 0) {}—— 属性默认值不依赖?? - 但接收参数时仍常用:
public function setRole(array $roles): void {<br> $this->roles = $roles['list'] ?? [];<br>} - 配合严格类型:若函数参数允许
null,可用??转为非空值function process(string $id = null): string { return $id ?? 'default-id'; }
注意事项与常见误区
?? 只检测 null 和未定义,**不检测空字符串、0、false 等“falsy”值**——这点与 ?: 不同:
$x = '' ?? 'fallback'; // 返回 '',不是 'fallback'$y = 0 ?? 99; // 返回 0- 若需“falsy 回退”,仍用三元:
$z = $val ?: 'fallback'; - 不能用于函数调用左边:
foo() ?? 'default'合法,但foo() ?? bar()中bar()总是执行(无短路)——不过这是预期行为,??本就不承诺右侧惰性求值
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











