我试图了解PHP构造函数和析构函数的行为.一切都按照构造函数的预期进行,但是我无法隐式地触发析构函数.我已经完成了PHP.net和相关网站上的所有阅读,但我无法找到这个问题的答案.
如果我有一个简单的类,例如:
class test{ public function __construct(){ print "contructing<br>"; } public function __destruct(){ print "destroying<br>"; } }
我称之为:
$t = new test;
它打印构造函数消息.但是,我希望当脚本结束并呈现页面时,析构函数应该触发.当然不是.
如果我打电话未设置($t);当脚本结束时,析构函数当然会触发,但有没有办法让它隐式触发?
谢谢你的任何提示
这很容易测试.
<?PHP class DestructTestDummy { protected $name; function __construct($name) { echo "Constructing $name\n"; $this->name = $name; } function __destruct() { echo "Destructing $this->name\n"; //exit; } } echo "Start script\n"; register_shutdown_function(function() { echo "Shutdown function\n"; //exit }); $a = new DestructTestDummy("Mr. Unset"); $b = new DestructTestDummy("Terminator 1"); $c = new DestructTestDummy("Terminator 2"); echo "Before unset\n"; unset($a); echo "After unset\n"; echo "Before func\n"; call_user_func(function() { $c = new DestructTestDummy("Mrs. Scopee"); }); echo "After func\n"; $b->__destruct(); exit("Exiting\n");
在PHP 5.5.12中打印:
Start script Constructing Mr. Unset Constructing Terminator 1 Constructing Terminator 2 Before unset Destructing Mr. Unset After unset Before func Constructing Mrs. Scopee Destructing Mrs. Scopee After func Destructing Terminator 1 Exiting Shutdown function Destructing Terminator 2 Destructing Terminator 1