(PECL weakref >= 0.1.0)
Weakref::acquire — Создает сильную ссылку на текущий объект
Создает из слабой ссылки сильную ссылку на текущий объект, которую будет учитывать сборщик мусора.
Объект Weakref поддерживает внутренний счетчик для отслеживания внешних ссылок. Если вызов Weakref::acquire() успешен, то счетчик увеличится на один.
У этой функции нет параметров.
Возвращает TRUE
, если ссылка валидна и можеть быть преобразована в сильную, FALSE
в противном случае.
Пример #1 Пример выполнения Weakref::acquire()
<?php
class MyClass {
public function __destruct() {
echo "Уничтожение объекта!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
$r1->acquire();
echo "Удаление o1...\n";
unset($o1);
$o2 = $r1->get();
$r1->release();
echo "Удаление o2...\n";
unset($o2);
?>
Результат выполнения данного примера:
Удаление o1... Удаление o2... Уничтожение объекта!
Пример #2 Пример вложенных вызовов acquire/release
<?php
class MyClass {
public function __destruct() {
echo "Уничтожение объекта!\n";
}
}
$o1 = new MyClass;
$r1 = new Weakref($o1);
echo "Создание сильной ссылки...\n";
$r1->acquire();
echo " Удаление...\n";
unset($o1);
echo " Создание сильной ссылки...\n";
$r1->acquire();
echo " Создание сильной ссылки...\n";
$r1->acquire();
echo " Создание сильной ссылки...\n";
$r1->release();
echo " Удаление сильной ссылки...\n";
$r1->release();
echo "Удаление сильной ссылки...\n";
$r1->release();
?>
Результат выполнения данного примера:
Создание сильной ссылки... Удаление... Создание сильной ссылки... Создание сильной ссылки... Удаление сильной ссылки... Удаление сильной ссылки... Удаление сильной ссылки... Уничтожение объекта!