在php中创建错误处理程序类

在php中创建错误处理程序类,php,exception,error-handling,Php,Exception,Error Handling,我最近一直在问关于异常和处理异常的问题,我现在的问题是如何使用 set_exception_handler(); 在php中设置错误处理类的类中,当抛出错误时,由该类处理。正如定义所述: 如果在try/catch块中未捕获异常,则设置默认异常处理程序。调用异常处理程序后,执行将停止 我在想我可以做一些类似的事情: class Test{ public function __construct(){ set_exception_handler('exception');

我最近一直在问关于异常和处理异常的问题,我现在的问题是如何使用

set_exception_handler();
在php中设置错误处理类的类中,当抛出错误时,由该类处理。正如定义所述:

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

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

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

    public function exception($exception){
        echo $exception->getMessage();
    }
}
但问题是,如果用户正在设置应用程序或使用应用程序中的任何API,他们必须执行一个完整的测试:
newtest()

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

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

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

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

    // 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'));
    

    每个人都认为使用set_exception_处理程序会捕获PHP中的所有错误,但事实并非如此,因为set_exception_处理程序无法处理某些错误。处理所有类型错误的正确方法必须如下所示:

     //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的所有错误。

    值得一提的是,一般来说,当您想将函数名传递给某个对象,而该函数实际上是一个对象方法时,可以使用此处显示的语法。也就是说,此解决方案适用于其他需要函数名的PHP方法。我在一段时间内看到了我的错误,我担心的是,如果用户正在设置应用程序,这是另一个类,他们必须作为“新”调用我知道这是很久以前的事了,但是最好使用
    static::class
    ,而不仅仅是静态方法的类名。通过使用它,您可以支持名称空间<代码>设置异常处理程序(数组(静态::类,“异常”)这应该在官方PHP帮助中,标记为
    最佳实践