使用弱引用,可以保留对对象的引用,这不会阻止对象被破坏。可以通过弱引用来实现类似缓存的结构。
弱引用类似于普通引用,不同之处在于它不会阻止垃圾收集器收集对象。如果找不到对该对象的强引用,则它将立即从内存中删除。这样,可以实现高速缓存的大多数优点,而不会出现内存问题。
PHP 7.4中引入了WeakReference类。在此版本之前,弱引用扩展曾获得相同的效果。WeakReference类具有以下结构
WeakReference { /* Methods */ public __construct ( void ) public static create ( object $referent ) : WeakReference public get ( void ) : ?object }
public WeakReference::__ construct(void) —禁止实例化WeakReference类。可以使用工厂方法WeakReference::create()实例化它。
公共静态WeakReference::create(对象$referent):WeakReference —创建一个新的WeakReference。
public WeakReference::get(void):?object —获取一个弱引用的对象。如果对象已被销毁,则返回NULL。
以下示例具有myclass对象。对其对象的WeakReference显示了一个参考。然后取消设置对象。现在,WeakReference返回NULL
<?php class myclass{ function Hello(){ echo "Hello"; } } $obj = new myclass(); $ref = WeakReference::create($obj); var_dump($ref->get()); unset($obj); var_dump($ref->get()); ?>
输出结果
上面的程序显示以下输出
object(myclass)#1 (0) { } NULL