note 81116 rejected from language.oop5.decon by nlopess
| From: | nlopess@php.net | Date: | Thu, 14 Feb 2008 20:18:51 +0000 |
| Subject: | note 81116 rejected from language.oop5.decon by nlopess | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-136163@lists.php.net to get a copy of this message | ||
Note Submitter: mrsol at gsm-travel dot com
----
Function __destruct is not executed by a call unset for a class.
<?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";
?>
Show
--------------------
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
--------------------
The lost class to which there is no access turns out?
php -v
PHP 5.2.1 (cli) (built: Nov 28 2007 23:14:55)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies