Php 在_destruct()中,如何查看当前是否有异常?

Php 在_destruct()中,如何查看当前是否有异常?,php,exception,destructor,php-internals,Php,Exception,Destructor,Php Internals,如何查看当前是否存在异常,即堆栈正在展开 在下面的示例中,您将如何实现isExceptionFlight() 这似乎积极地阻止了我做我想做的事情,并解释了为什么执行器全局异常总是nullptr尽管我不推荐,但我在过去已经实现了它。我的方法(简单地说)是这样的: 实现自定义异常类 class MyException extends Exception { public static $exceptionThrown = false; public function __const

如何查看当前是否存在异常,即堆栈正在展开

在下面的示例中,您将如何实现
isExceptionFlight()


这似乎积极地阻止了我做我想做的事情,并解释了为什么执行器全局异常总是
nullptr

尽管我不推荐,但我在过去已经实现了它。我的方法(简单地说)是这样的:

实现自定义异常类

class MyException extends Exception {
    public static $exceptionThrown = false;

    public function __construct($your parameters) {
         self::$exceptionThrown = true;
    }

}
现在,每个异常都应该是您自己的异常实现,而不是默认异常

class Destroyer {
    public function __destruct() {
        if(MyException::exceptionThrown() {
            Database::rollback();
        } else {
            Database::commit();
        }
    }
}

但是,如果这个异常被捕获了呢?
MyException::exceptionThrown
即使已解决,也不会是
true
吗?是的。正如我所说的,我并不真正推荐这种方法,因为有很多框架更完整。但在使用该代码时,我更为新手,我喜欢使用HTTP失败之类的异常。在使用它时,我只遇到捕获一次异常的问题,所以我只是在catch块中添加了一个“MyException::$exceptionThrown=false”。既然我没有更多类似的麻烦,我就让它过去。
class MyException extends Exception {
    public static $exceptionThrown = false;

    public function __construct($your parameters) {
         self::$exceptionThrown = true;
    }

}
class Destroyer {
    public function __destruct() {
        if(MyException::exceptionThrown() {
            Database::rollback();
        } else {
            Database::commit();
        }
    }
}