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

PHP循环中引用为何不指向同一内存地址?

PHP引用赋值的动态指向问题解析

你的困惑核心是没注意到引用赋值会动态改变变量的指向目标,不是引用逻辑矛盾,而是循环里的操作让$a和$b的指向关系发生了变化,一步步拆解给你看:

初始阶段

$a =& $b;
var_dump($a); // null
var_dump($b); // null

这一步确实是$a和$b指向同一个内存地址,值都是null,没问题。

循环内的关键操作

进入foreach循环,$key为'ha',执行$a =& $a[$key];,这个语句要分两步理解:

  1. 计算右侧表达式$a[$key]:
    此时$a还指向最初的null,PHP对null进行数组下标访问时,会自动将其转换为空数组,然后为这个数组添加键'ha',默认值为null。这一步直接修改了$a(也就是最初的那个内存地址)的值,所以原本指向这个地址的$b,自然就变成了['ha' => null]。
  2. 执行引用赋值$a =& ...:
    这一步会让$a放弃之前的指向(不再指向最初的那个数组),转而指向刚刚创建的$a['ha']对应的内存地址——也就是那个null值。

最终结果

这时候:

  • $a的指向目标是数组$b['ha']对应的null;
  • $b仍然指向最初的那个内存地址,也就是已经变成数组['ha' => null]的变量。
    所以才会出现var_dump($a)显示null,var_dump($b)显示数组的情况——它们已经不再指向同一个内存地址了。

简单说:PHP的引用不是“绑定两个变量永远同步”,而是让变量临时指向同一个值。当你给变量重新赋值引用时,它的指向就会改变,之前的绑定关系也就失效了。

内容的提问来源于stack exchange,提问作者Robbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:15:50