PHP中??=运算符的作用及已设值(null/0/false)时的行为问询
关于PHP 7.4中
??=运算符的行为详解 嘿,这个问题问得特别到位!我来帮你把??=(空合并赋值运算符)的具体行为掰扯清楚,你关心的几种情况都会一一说明~
首先得明确??=的核心逻辑:它是$x = $x ?? $y的语法糖,只有当左侧的变量/数组键不存在,或者存在但值为null时,才会把右侧的值赋给左侧。换句话说,它判断的标准是「是否为null(或未定义)」,而不是「是否为假值」。
接下来针对你疑惑的几种情况逐一分析:
- 当值为
null时:会触发赋值操作。因为null正是??运算符判定的「需要替换」的目标,原有的null会被右侧的值覆盖。 - 当值为
0时:不会赋值。0是有效的非null值,哪怕它在布尔判断里是假值,??=也会保留原有的0,不会替换。 - 当值为
false时:同样不会赋值。和0一样,false是明确的非null值,??=会忽略赋值操作,保持原有的false不变。
为了更直观,给你几个示例代码:
// 1. 数组键存在但值为null $data['comments']['user_id'] = null; $data['comments']['user_id'] ??= 'new value'; // 结果:$data['comments']['user_id'] 变为 'new value' // 2. 数组键存在且值为0 $data['comments']['user_id'] = 0; $data['comments']['user_id'] ??= 'new value'; // 结果:依然是0,未被替换 // 3. 数组键存在且值为false $data['comments']['user_id'] = false; $data['comments']['user_id'] ??= 'new value'; // 结果:依然是false,未被替换 // 4. 数组键不存在 $data['comments']['user_id'] ??= 'new value'; // 结果:'new value'被成功赋值
顺便提个容易混淆的点:??=和||=(逻辑或赋值运算符)不一样。||=会在左侧是任何假值(包括0、false、空字符串''等)时都执行赋值,而??=只对null或未定义的情况生效,这也是它的核心特性。
内容的提问来源于stack exchange,提问作者Oscar Gallardo
相关产品推荐
相关产品推荐

