防止在引发异常时调用析构函数

时间:2018-07-18 11:26:40

标签: php

是否可以防止在抛出异常时执行析构函数?

基本上,我的构造函数当前设置为将某些信息保存到文件中。但是,即使当我抛出错误并以为php会停止并全部停止时,也会发生这种情况。

示例:

<?php
class Test {
    function __construct() {
        echo "constructor";
    }

    function __destruct() {
        echo "destructor";
    }

    function Hello() {
        echo "Hello World";
    }
}

$foo = new Test;

$foo->Hello();

throw new Exception("Error Processing Request", 1);

// output: constructorHelloWorlddestructor
// expected output: constructorHelloWorld

?> 

1 个答案:

答案 0 :(得分:0)

不,这不可能。

您可以执行一些技巧,例如注册一个异常处理程序并分配一个静态变量以标记您正在错误流中,并在执行代码之前在析构函数中检查该变量。但是,由于无法确定何时调用析构函数,因此不能确定它是否在异常之后但在变量赋值之前。

但是总的来说,您可能没有使用析构函数的用途,老实说,我已经开发了15年,我一方面指望我使用析构函数有多少次,通常还有其他效率更高设计模式...将需要更多上下文。