Computer >> Máy Tính >  >> Lập trình >> PHP

Bản đồ yếu trong PHP là gì?

Bản đồ yếu đã được thêm vào trong PHP 7.4. Nó có thể được sử dụng để loại bỏ hoặc xóa các đối tượng khi bộ đệm ẩn tham chiếu đến các lớp thực thể đối tượng. Nó tham chiếu đến các đối tượng đó, điều này không tránh các đối tượng từ bộ nhớ rác được thu thập. Trong PHP 8, bản đồ yếu cho phép chúng tôi lưu trữ dữ liệu ngẫu nhiên được liên kết với các đối tượng mà không làm rò rỉ bất kỳ bộ nhớ nào.

Nói cách khác, bản đồ yếu trong PHP 8 là một nhóm các đối tượng trong đó các khóa tham chiếu yếu . Bản đồ yếu sử dụng một lớp để tạo một đối tượng có thể được sử dụng làm khóa, có thể giúp xóa và phá hủy bản đồ yếu nếu không có tài liệu tham khảo nào khác. Trong quá trình lâu dài, nó có thể tránh rò rỉ bộ nhớ, giúp cải thiện hiệu suất cuối cùng.

Có thể nói bản đồ yếu hoạt động như một quá trình thu gom rác tự động. Bất cứ khi nào một biến bị xóa, PHP sẽ kiểm tra xem có biến nào còn tham chiếu đến đối tượng đó hay không. Nếu biến không tham chiếu, thì PHP sẽ xóa đối tượng đó một cách an toàn. Quá trình này được gọi là thu gom rác .

Ví dụ:Bản đồ yếu 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));
?>

Đầu ra

Object called 1 0