在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帮助中,标记为最佳实践
!