PHP 中的弱映射是什么?
弱映射已添加到 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("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); // unsetting the objects and Weak Maps frees up memory print_r(count($obj->cache)); ?>
输出
Object called 1 0
广告