Giới thiệu
Với tham chiếu yếu (weak reference), có thể giữ tham chiếu đến đối tượng mà không ngăn cản đối tượng bị hủy. Triển khai cấu trúc kiểu cache có thể dùng weak reference.
Tham chiếu yếu tương tự tham chiếu bình thường, ngoại trừ nó không ngăn garbage collector thu gom đối tượng. Nếu không tìm thấy tham chiếu mạnh đến đối tượng, nó sẽ bị xóa khỏi bộ nhớ ngay lập tức. Cách này triển khai được hầu hết lợi ích của cache mà không gặp vấn đề bộ nhớ.
Lớp WeakReference giới thiệu từ PHP 7.4. Trước phiên bản này, hiệu ứng tương tự đạt được bằng phần mở rộng weakref. Cấu trúc WeakReference:
Cú pháp
WeakReference { public __construct ( void ) public static create ( object $referent ) : WeakReference public get ( void ) : ?object }Phương thức
public WeakReference::__construct ( void ) - Ngăn khởi tạo WeakReference. Chỉ khởi tạo qua factory method WeakReference::create().
public static WeakReference::create ( object $referent ) : WeakReference - Tạo WeakReference mới.
public WeakReference::get ( void ) : ?object - Lấy đối tượng tham chiếu yếu. Nếu đối tượng đã bị hủy, trả về NULL.
Ví dụ Generator
Ví dụ có đối tượng myclass. WeakReference đến đối tượng cho thấy 1 tham chiếu. Unset đối tượng. Bây giờ WeakReference trả về NULL.
Ví dụ
<?php class myclass { function Hello() { echo "Hello"; } } $obj = new myclass(); $ref = WeakReference::create($obj); var_dump($ref->get()); unset($obj); var_dump($ref->get()); ?>Kết quả
object(myclass)#1 (0) { } NULL