这是我第一次在 stackoverflow 上发帖,但这些帖子对我帮助很大!
无论如何,关于我的问题...是否有 PHP 中的析构函数未被调用的情况?我问的原因是因为我有一个映射器类,它将数据映射到对象,在构造函数中,我启动一个事务,在析构函数中我将调用提交(我还有一个成员函数,它也可以执行提交) ,如有必要)。如果存在未调用析构函数的任何情况,我想知道,以便我可以预测它的发生并进行适当的计划。
非常感谢!
-
根据manual http://www.php.net/manual/en/language.oop5.decon.php,即使脚本被终止,析构函数也会被执行die()
or exit()
:
即使使用 exit() 停止脚本执行,析构函数也会被调用。在析构函数中调用 exit() 将阻止执行剩余的关闭例程。
根据这个问题 https://stackoverflow.com/questions/236795/php-destructor-vs-register-shutdown-function,析构函数确实not当达到 PHP 的执行时间限制时执行(在 Apache 2、Windows 7 上的 PHP 5.2 上已确认)。
析构函数也做not当脚本因达到内存限制而终止时执行。 (刚刚测试过)
析构函数does在致命错误上执行(刚刚测试)更新:OP无法确认这一点 - 事情不同的地方似乎存在致命错误
It does not在解析错误时执行(因为整个脚本不会被解释)
如果服务器进程崩溃或发生 PHP 无法控制的其他异常,析构函数肯定不会被执行。
总而言之,看起来还是蛮靠谱的。
然而,在析构函数中执行除清理之外的操作的缺点是,您的选择有些有限。您不能再抛出异常(除非您在析构函数中再次捕获它们),您不能输出任何错误消息,您不能再真正依赖其他对象(如数据库接口)的存在。 ....我在使用析构函数方面没有丰富的经验,但我不确定您打算做的事情是否是一个可行的想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)