PHP 弱引用
理解 PHP 弱引用如何允许引用对象但不阻止垃圾回收,优化内存管理。 · 难度:入门 · +15XP
弱引用概念
弱引用(WeakReference)是 PHP 7.4 引入的特性,允许持有对象的引用但不阻止对象被垃圾回收,适用于缓存、观察者模式等。
基本用法
$obj = new stdClass();
$weakRef = WeakReference::create($obj);
echo $weakRef->get() === $obj; // true
unset($obj);
var_dump($weakRef->get()); // NULL,对象已销毁
WeakMap
PHP 8 引入了 WeakMap,键为对象引用,当对象被回收时自动移除条目。
$map = new WeakMap();
$obj = new stdClass();
$map[$obj] = 'some data';
echo count($map); // 1
unset($obj);
echo count($map); // 0
| 类 | 说明 |
|---|---|
| WeakReference | 单个弱引用 |
| WeakMap | 键为弱引用的映射 |
应用场景
缓存对象关联数据而不影响生命周期。
练习提示
使用 WeakMap 存储对象缓存,然后销毁对象观察 map 大小变化。