Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

PHP에서 약한 맵이란 무엇입니까?

<시간/>

약한 지도 PHP 7.4에 추가되었습니다. 캐시가 개체 엔터티 클래스를 참조할 때 개체를 제거하거나 삭제하는 데 사용할 수 있습니다. 이는 수집된 메모리 가비지에서 개체를 피하지 않는 해당 개체를 참조합니다. PHP 8에서 약한 맵을 사용하면 메모리 누수 없이 객체에 연결된 임의의 데이터를 저장할 수 있습니다.

즉, PHP 8의 약한 맵은 키가 약하게 참조하는 개체 그룹입니다. . 약한 맵은 클래스를 사용하여 키로 사용할 수 있는 객체를 생성합니다. 이는 추가 참조가 없는 경우 약한 맵을 제거하고 파괴하는 데 도움이 될 수 있습니다. 장기적 프로세스에서 메모리 누수를 방지할 수 있어 궁극적으로 성능이 향상됩니다.

약한 맵은 자동 가비지 수집 프로세스로 작동한다고 말할 수 있습니다. 변수가 삭제될 때마다 PHP는 변수가 여전히 해당 객체를 참조하는지 확인합니다. 변수가 참조하지 않는 경우 PHP는 해당 객체를 안전하게 삭제합니다. 이 프로세스를 가비지 수집이라고 합니다. .

예:Weak Maps 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