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

PHP实现链表:该构造方式是否安全?

关于链表代码中局部变量引用的困惑解答

嘿,我完全懂你为啥会有这个疑问——刚接触PHP引用的时候很容易搞混变量容器和值的内存关系!咱们一步步拆解清楚:

首先得纠正一个核心误解:PHP里的引用不是指向变量本身,而是指向变量所对应的值的内存地址。

咱们看你提到的那几行代码:

  1. $link = new Node(); —— 这行代码做了两件事:一是在内存里创建了一个Node对象实例,二是让局部变量$link持有指向这个对象内存地址的引用。
  2. $this->firstNode = &$link; —— 这行不是让$firstNode指向$link这个变量容器,而是让它也持有和$link完全相同的引用:也就是指向那个刚创建的Node对象的内存地址。

那当方法执行完毕后,局部变量$link确实会被销毁,但这只是销毁了变量容器,而它指向的Node对象并不会跟着消失!因为$this->firstNode还牢牢握着对这个对象的引用呢。PHP的垃圾回收规则是:只有当一个对象没有任何引用指向它的时候,才会被标记为垃圾并释放内存。

给你举个直观的小例子验证一下:

class DemoLinkedList {
    public $firstNode;

    public function initFirstNode() {
        $link = new stdClass();
        $link->data = "测试数据";
        $this->firstNode = &$link; // 和你的代码逻辑一致
    }
}

$list = new DemoLinkedList();
$list->initFirstNode();
// 方法执行完后,$link已经销毁,但firstNode依然能访问对象
echo $list->firstNode->data; // 会输出:测试数据

所以你完全不用担心$firstNode会指向“已不存在的变量”——它从始至终指向的都是Node对象的内存,只要$firstNode还在,这个对象就会好好待在内存里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:53