You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 23:32:48