PHP 中的弱映射是什么?
phpserver side programmingprogramming更新于 2025/10/9 0:37:17
弱映射是在 PHP 7.4 中添加的。当缓存引用对象实体类时,可以使用它来移除或删除对象。它引用这些对象,但这并不能避免对象被垃圾回收到内存中。在 PHP 8 中,弱映射允许我们存储与对象关联的随机数据,而不会泄漏任何内存。
换句话说,PHP 8 中的弱映射是一组键弱引用的对象。弱映射使用一个类来创建一个可用作键的对象,这可以帮助在不再有引用的情况下移除并销毁弱映射。从长远来看,它可以避免内存泄漏,最终提高性能。
我们可以说弱映射就像一个自动垃圾回收过程。每当一个变量被删除时,PHP 都会检查是否有任何变量仍在引用该对象。如果变量未引用,PHP 将安全地删除该对象。此过程称为垃圾收集。
示例:PHP 8 弱映射
<?php
class WeakExample {
public WeakMap $cache;
public function __construct() {
$this->cache = new WeakMap();
}
public function getCaching(object $obj) {
return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
}
public function computeSomethingExpensive(object $obj) {
print_r("对象被调用");
return rand(1, 100);
}
}
$cacheObject = new stdClass;
$obj = new WeakExample;
$obj->getCaching($cacheObject);
$obj->getCaching($cacheObject);
print_r(count($obj->cache));
unset($cacheObject); // 取消设置对象,Weak Map 释放内存
print_r(count($obj->cache));
?>
输出
对象调用 1 0

