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