php析构函数行为
发布时间:2020-12-13 13:44:55 所属栏目:PHP教程 来源:网络整理
导读:我试图了解php构造函数和析构函数的行为.一切都按照构造函数的预期进行,但是我无法隐式地触发析构函数.我已经完成了php.net和相关网站上的所有阅读,但我无法找到这个问题的答案. 如果我有一个简单的类,例如: class test{ public function __construct(){ pr
我试图了解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 $namen"; $this->name = $name; } function __destruct() { echo "Destructing $this->namen"; //exit; } } echo "Start scriptn"; register_shutdown_function(function() { echo "Shutdown functionn"; //exit }); $a = new DestructTestDummy("Mr. Unset"); $b = new DestructTestDummy("Terminator 1"); $c = new DestructTestDummy("Terminator 2"); echo "Before unsetn"; unset($a); echo "After unsetn"; echo "Before funcn"; call_user_func(function() { $c = new DestructTestDummy("Mrs. Scopee"); }); echo "After funcn"; $b->__destruct(); exit("Exitingn"); 在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 因此,我们可以看到,当我们显式取消设置对象,超出范围时以及脚本结束时,将调用析构函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |