Класс WeakRef

(PECL weakref >= 0.1.0)

Введение

Класс WeakRef предоставляет способ доступа к объекту, не влияя при этом на количество ссылок на него, таким образом сборщик мусора сможет освободить этот объект. Это также дает возможность превратить слабую ссылку в сильную.

Замечание:

Класс WeakRef не следует путать с классом WeakReference.

Обзор классов

WeakRef {
/* Методы */
public Weakref::__construct ( object $object )
public Weakref::acquire ( void ) : bool
public Weakref::get ( void ) : object
public Weakref::release ( void ) : bool
public Weakref::valid ( void ) : bool
}

Примеры

Пример #1 Пример использования WeakRef

<?php
class MyClass {
    public function 
__destruct() {
        echo 
"Уничтожение объекта!\n";
    }
}

$o1 = new MyClass;

$r1 = new WeakRef($o1);

if (
$r1->valid()) {
    echo 
"Объект все еще существует!\n";
    
var_dump($r1->get());
} else {
    echo 
"Объект уничтожен!\n";
}

unset(
$o1);

if (
$r1->valid()) {
    echo 
"Объект все еще существует!\n";
    
var_dump($r1->get());
} else {
    echo 
"Объект уничтожен!\n";
}
?>

Результат выполнения данного примера:

Объект все еще существует!
object(MyClass)#1 (0) {
}
Уничтожение объекта!
Объект уничтожен!

Содержание

  • Weakref::acquire — Создает сильную ссылку на текущий объект
  • Weakref::__construct — Создает новую слабую ссылку
  • Weakref::get — Возвращает объект, на который указывает ссылка
  • Weakref::release — Освобождает предыдущую сильную ссылку
  • Weakref::valid — Проверяет актуальность ссылки на объект