PHP 中的弱映射是什么?
PHP7.4中添加了弱映射。当缓存引用对象实体类时,它可用于移除或删除对象。它引用那些对象,这不会避免对象从内存中垃圾收集。在PHP8中,弱映射允许我们存储链接到对象的随机数据,而不会泄漏任何内存。
换句话说,PHP8中的弱映射是一组键弱引用的对象。弱映射使用一个类来创建一个可以用作键的对象,如果没有进一步的引用,它可以帮助删除和销毁弱映射。在长时间运行的过程中,可以避免内存泄漏,最终提高性能。
我们可以说弱映射是一个自动垃圾收集过程。每当删除一个变量时,PHP都会检查是否有任何变量仍在引用该对象。如果变量没有被引用,那么PHP将安全地删除该对象。这个过程称为垃圾收集。
示例:弱映射PHP8
cache = new WeakMap();
}
public function getCaching(object $obj) {
return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
}
public function computeSomethingExpensive(object $obj) {
print_r("Object called");
return rand(1, 100);
}
}
$cacheObject = new stdClass;
$obj = new WeakExample;
$obj->getCaching($cacheObject);
$obj->getCaching($cacheObject);
print_r(count($obj->cache));
unset($cacheObject); //取消设置对象和弱映射释放内存
print_r(count($obj->cache));
?>输出结果Object called 1 0