3

我最近一直在询问有关异常和处理异常等的问题,最近在这个问题中对我进行了最好的解释。我现在的问题是我将如何使用

set_exception_handler();

在一个类中设置 php 中的错误处理类,当抛出错误时由该类处理。如定义所述:

如果在 try/catch 块中未捕获到异常,则设置默认异常处理程序。调用 exception_handler 后将停止执行。

我在想我可以做类似的事情:

class Test{
    public function __construct(){
        set_exception_handler('exception');
    }

    public function exception($exception){
        echo $exception->getMessage();
    }
}

但问题是,如果用户正在设置应用程序或使用应用程序中的任何 API,他们必须做一个整体:new Test();

那么我如何编写一个异常处理程序类:

  1. 抛出异常时自动调用以处理“未捕获”异常。
  2. 以可扩展的 OOP 方式完成。

我所展示的方式是我能想到的唯一方式。

4

2 回答 2

9

为了让您的课程正常工作,您的构造函数中的行应该是:

// if you want a normal method        
set_exception_handler(array($this, 'exception'));

// if you want a static method (add "static" to your handler method
set_exception_handler(array('Test', 'exception'));
于 2013-02-19T05:18:36.017 回答
9

每个人都认为使用 set_exception_handler 会捕获 PHP 中的所有错误,但事实并非如此,因为 set_exception_handler 没有处理某些错误,因此必须以正确的方式处理所有类型的错误:

 //Setting for the PHP Error Handler
 set_error_handler( call_back function or class );

 //Setting for the PHP Exceptions Error Handler
 set_exception_handler(call_back function or class);

 //Setting for the PHP Fatal Error
 register_shutdown_function(call_back function or class);

通过设置这三个设置,您可以捕获 PHP 的所有错误。

于 2013-02-19T05:37:16.847 回答