Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Weak Maps (Bản đồ yếu) trong PHP là gì?

Weak Maps được thêm trong PHP 7.4. Có thể dùng để xóa đối tượng khi cache tham chiếu đến các lớp thực thể đối tượng. Tham chiếu đến những đối tượng không ngăn cản đối tượng bị thu gom rác bộ nhớ. Trong PHP 8, weak maps cho phép lưu trữ dữ liệu ngẫu nhiên liên kết với đối tượng, không rò rỉ bộ nhớ.

Nói cách khác, weak map trong PHP 8 là tập hợp các đối tượng mà khóa tham chiếu yếu. Weak map dùng lớp để tạo đối tượng làm khóa, giúp xóa và hủy weak map nếu không còn tham chiếu khác. Về lâu dài, tránh rò rỉ bộ nhớ, cải thiện hiệu năng.

Có thể nói weak map hoạt động như quy trình thu gom rác tự động. Khi biến bị xóa, PHP kiểm tra xem còn biến nào tham chiếu đến đối tượng đó không. Nếu không còn tham chiếu, PHP xóa đối tượng an toàn. Quá trình này gọi là garbage collection (thu gom rác).

Ví dụ: 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); // hủy đối tượng và Weak Maps giải phóng bộ nhớ
print_r(count($obj->cache));
?>

Kết quả

Object called
1
0