为什么PHP set_execption_处理程序捕获错误对象
我正在使用PHP中的错误和异常句柄,并且在尝试调用不存在的方法时发现一些意外行为 以下是PHP:为什么PHP set_execption_处理程序捕获错误对象,php,exception,error-handling,Php,Exception,Error Handling,我正在使用PHP中的错误和异常句柄,并且在尝试调用不存在的方法时发现一些意外行为 以下是PHP: 我会尽力回答我自己的问题@apokryfos是对的:手册中有这方面的详细信息。我发现set\u exception\u处理程序不仅捕获exception和Throwable对象,而且还捕获Error对象(它们是Throwable对象,但不是exception对象),这有点令人困惑 我发现这令人困惑,因为set\u error\u handler中有“error”一词,但它没有捕获这些对象类型 因此,
我会尽力回答我自己的问题@apokryfos是对的:手册中有这方面的详细信息。我发现set\u exception\u处理程序不仅捕获exception
和Throwable
对象,而且还捕获Error
对象(它们是Throwable
对象,但不是exception
对象),这有点令人困惑
我发现这令人困惑,因为set\u error\u handler
中有“error”一词,但它没有捕获这些对象类型
因此,对于其他偶然发现这一点的人来说,在较新版本的PHP中,set\u Exception\u处理程序
回调不能使用Exception
对象。您需要一个可丢弃的对象,并且非线性地,您还可能得到错误对象,这些对象不是设置错误处理程序所接收的对象
为了在我自己的设置中处理这个问题,我使用了以下set\u error\u handler
来让事情变得更干净:
set\u error\u处理程序(函数($errno、$errstr、$errfile、$errline、$errcontext){
$args=array($errstr,$errno,E_ERROR,$errfile,$errline);
$errorException=new\errorException(…$args);
});
然后,您的set\u exception\u处理程序将捕获此消息。
希望这对其他人有帮助:)说,自PHP7以来,大多数错误都是通过抛出错误异常来报告的,处理程序也会捕获这些异常。错误和异常都实现了可丢弃的接口。你是说我只需要一个处理程序吗?如果此调用导致错误,为什么会被异常处理程序捕获?set\u exception\u handler
是一个遗留名称。由于PHP7,它的功能比这个名字所暗示的要多。它捕获所有可丢弃的对象,包括错误
和异常
对象。如果您没有设置一个,那么您仍然可以在set\u error\u处理程序
回调中处理这些错误,但是(我认为)这是一种传统的处理方法。请注意,在这两个处理程序中都无法捕获某些错误(例如解析错误),对于这些错误,您唯一的选择可能是register\u shutdown\u function
,但这只能用于日志记录或清理。好的,我将返回并重新评估如何设置捕获这些错误。如果我只使用set\u exception\u处理程序,这是否令人满意?这会捕获简单的可丢弃错误吗?