
php 7引入的`??`是空合并运算符,用于安全获取变量值:当左侧操作数存在且不为`null`时返回其值,否则返回右侧默认值,比`isset()`+三元组合更简洁高效。
在PHP开发中,频繁需要处理未定义或为null的变量(如$_GET、$_POST参数或配置项),传统写法往往冗长且易出错。例如,为避免Notice: Undefined variable,开发者常这样判断:
$username = isset($username) && $username !== null ? $username : ''; // 或更谨慎地: $username = !empty($username) ? $username : ''; // ❌ 错误:empty()会把'0'、'false'等falsy值也判为“空”
而空合并运算符 ?? 提供了语义清晰、语法简练的替代方案:
$username = $username ?? ''; $user_id = $_GET['id'] ?? 0; $theme = $config['theme'] ?? 'light';
✅ 核心规则:$a ?? $b 等价于 isset($a) && $a !== null ? $a : $b
⚠️ 注意:它不等价于 empty()(empty()会将 0、'0'、false、[] 等 falsy 值判定为“空”,而 ?? 仅关注 null 和“未定义”);也不等价于单纯 isset()(isset()不检查值是否为null,但??会——若变量存在但值为null,仍会回退到右侧表达式)。
此外,?? 支持链式使用,可逐级提供默认值:
$country = $_SESSION['user']['profile']['country'] ?? $_COOKIE['default_country'] ?? 'US';
这比嵌套三元运算符(?:)或多重isset()判断更可读、更安全。
本书图文并茂,详细讲解了使用LAMP(PHP)脚本语言开发动态Web程序的方法,如架设WAMP平台,安装与配置开源Moodle平台,PHP程序设计技术,开发用户注册与验证模块,架设LAMP平台。 本书适合计算机及其相关专业本、专科学生作为学习LAMP(PHP)程序设计或动态Web编程的教材使用,也适合对动态Web编程感兴趣的读者自觉使用,对LAMP(PHP)程序设计人员也具有一定的参考价值。
立即学习“PHP免费学习笔记(深入)”;
? 重要提示:
- ?? 是短路运算符:若左侧表达式已满足条件,右侧表达式不会被求值(适合含函数调用的默认值,如 getFallbackName() ?? 'guest');
- 自 PHP 7.4 起支持空合并赋值运算符 ??=,语法更进一步简化:
$config['timeout'] ??= 30; // 等价于 if (!isset($config['timeout'])) $config['timeout'] = 30;
总之,?? 是现代PHP中处理可选值的首选工具——它精准聚焦于“存在性 + 非空性(非null)”双重校验,兼顾性能、安全与可维护性。










