atv
Новичок
Неочевидные проблемы использования объектов.
Как известно (http://www.php.net/manual/en/language.oop5.basic.php), объекты в PHP5 освобождаются из памяти только тогда, когда больше нет ссылок указывающих на объект. Так вот, это приводит к тому, что объекты с взаимными ссылками практически невозможно освободить из памяти.
Как видно из следующего примера
Объекты не уничтожаются после вызова unset($simple1).
Ручной вызов метода __destruct() также не приводит к освобождению памяти, поэтому остаётся единственный вариант
В этом случае
Вот такие пироги...
Как известно (http://www.php.net/manual/en/language.oop5.basic.php), объекты в PHP5 освобождаются из памяти только тогда, когда больше нет ссылок указывающих на объект. Так вот, это приводит к тому, что объекты с взаимными ссылками практически невозможно освободить из памяти.
Как видно из следующего примера
PHP:
class Simple1
{
protected $simple2;
public function __construct()
{
$this->simple2 = new Simple2($this);
}
public function __destruct()
{
print '<br>Destruct Simple1';
}
}
class Simple2
{
protected $simple1;
public function __construct($simple1)
{
$this->simple1 = $simple1;
}
public function __destruct()
{
print '<br>Destruct Simple2';
}
}
$simple1 = new Simple1();
unset($simple1);
print '<br>End of script';
Код:
End of script
Destruct Simple1
Destruct Simple2
PHP:
class Simple1
{
[...]
// добавить в класс специальный метод...
public function free()
{
unset($this->simple2);
}
}
$simple1 = new Simple1();
// и вызывать его...
$simple1->free();
// а потом уже...
unset($simple1);
Код:
Destruct Simple2
Destruct Simple1
End of script