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

更新于:01-Apr-2021

346 次浏览

开始你的职业生涯

完成课程获取认证

开始
广告