php 7.1空值合并赋值??=仅在左侧为null或未定义时赋值,对0、''、false等falsy值保持原值;而||=会覆盖所有falsy值。

记住PHP 7.1空值合并赋值的关键不是死背符号,而是理解它只在左侧为 【null 或未定义】 时才动手赋值,其余时候完全不碰原值——这个行为边界一旦混淆,就容易和逻辑或赋值(||=)或三元判断搞混,导致 0、''、false 等“falsy但非null”的值被意外覆盖。
先分清两个不同运算符
??= 是空合并赋值,只认 null 和 undefined(即“nullish”);||= 是逻辑或赋值,会把所有 falsy 值(0、false、''、[])都当成“要替换”的条件。
比如:$count ??= 10; —— 若 $count 是 0,它保持 0;但 $count ||= 10; 会让 $count 变成 10。
用变量存在性当记忆锚点
方法一:把 ??= 拆成「问?=」——「问」代表“是否存在且非 null”,「=」是动作。心里默念:“这个变量问过了吗?没问过(即 null/未定义),才给它塞默认值。”
方法二:联想 PHP 7.4 才正式加入 ??=,而 7.1 是可为空类型(?array、?string)的起点——它们共享同一套 nullish 判断逻辑。记住了 ?array 允许 null,就自然带出 ??= 的触发条件。
三步实操固化记忆
第一步:写一行测试代码,故意让左侧为 0、''、null 三种情况:
$a = 0; $a ??= 99; echo $a; // 输出 0
$b = ''; $b ??= 'default'; echo $b; // 输出 ''
$c = null; $c ??= 'default'; echo $c; // 输出 'default'
第二步:把这三行粘贴进本地 PHP 环境(7.4+)直接运行,亲眼看到结果差异。不要跳过这步——视觉反馈比文字描述强十倍。
第三步:在你正在写的配置初始化段落里,把所有 if (!isset($x)) $x = ...; 替换成 $x ??= ...;,改完立刻跑一遍单元测试。只要测试没崩,说明你用对了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











