약한 지도 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