mrsol
Новичок
unset не уничтожает класс полностью, если он передан куда либо по ссылке
Есть два класса, в одном создаётся другой, и другому передаётся по ссылке первый. Он у себя это запоминает. Потом пытюсь уничтожить первый класс командой unset . Класс пропадает, становится NULL и должен якобы пропасть класс который был создан внутри. Но вот функция __destruct отрабатывается, только тогда, когда скрипт заканчивает работу.
То есть остаётся где-то копия данного класса, к которой я не могу получить доступ.
Вопрос. Как нормально уничтожать такие объекты, чтобы отрабатывался __destruct. И все копии сколько их бы не было уничтожались.
Вот на этом коде проводил тестирование.
Вывод дает следующий
init class B
Construct Class B
run test func
Construct Class A
Add parent class
try unset B
now this class='NULL'
end script
Desctruct class B
Desctruct class A
Получается что объект $test_cl после unset сталл равен NULL. Но при этом в памяти где-то висит копия и как я понимаю занимает место.
Есть два класса, в одном создаётся другой, и другому передаётся по ссылке первый. Он у себя это запоминает. Потом пытюсь уничтожить первый класс командой unset . Класс пропадает, становится NULL и должен якобы пропасть класс который был создан внутри. Но вот функция __destruct отрабатывается, только тогда, когда скрипт заканчивает работу.
То есть остаётся где-то копия данного класса, к которой я не могу получить доступ.
Вопрос. Как нормально уничтожать такие объекты, чтобы отрабатывался __destruct. И все копии сколько их бы не было уничтожались.
Вот на этом коде проводил тестирование.
PHP:
<?php
class A{
public $parent_class;
public function add_parent(&$class){
echo "Add parent class\n";
$this->parent_class = &$class;
}
public function __construct(){
echo "Construct Class A\n";
}
public function __destruct(){
echo "Desctruct class A\n";
}
}
class B{
public $one_class;
public function test(){
$this->one_class = new A;
$this->one_class->add_parent(&$this);
}
public function __construct(){
echo "Construct Class B\n";
}
public function __destruct(){
echo "Desctruct class B\n";
}
}
echo "init class B\n";
$test_cl = new B();
echo "run test func\n";
$test_cl->test();
echo "try unset B\n";
unset($test_cl);
echo "now this class='".var_export($test_cl, true)."' \n";
echo "end script\n";
?>
init class B
Construct Class B
run test func
Construct Class A
Add parent class
try unset B
now this class='NULL'
end script
Desctruct class B
Desctruct class A
Получается что объект $test_cl после unset сталл равен NULL. Но при этом в памяти где-то висит копия и как я понимаю занимает место.