PHP7中对于Error的处理方式有哪些具体而微的细节和变化?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3155个文字,预计阅读时间需要13分钟。
项目前期使用GuzzleHttp发送curl请求,调用API响应超时,导致抛出异常。尽管使用了catch(Exception)进行捕获,但没有处理异常,导致代码意外停止运行。后来查阅资料后得知。
前段时间在项目中遇到一个当时觉得比较奇怪的情况:使用 GuzzleHttp 发送 curl 请求,API 响应超时导致抛出异常。但 catch(\Exception) 并没有捕获异常,导致代码意外停止运行。后来查资料发现,在 PHP 7 中,GuzzleHttp 请求超时抛出的异常继承的是 Error,而 Error 并没有继承 Exception,所以 catch(\Exception) 无法捕获并处理该异常。
PHP 7 中对 Error 的处理
在 PHP 5 中,当程序中有致命错误发生时,脚本会立即停止运行。并且,通过 set_error_handler 设置的错误处理程序在这种情况下并不会被调用。
⒈ 自定义错误处理程序 set_error_handler
set_error_handler 接受两个参数,第一个为自定义的错误处理函数,第二个参数指定触发该自定义错误处理函数的错误级别。但需要指出的是,在任何时候,只能有一个自定义的错误处理程序起作用。
本文共计3155个文字,预计阅读时间需要13分钟。
项目前期使用GuzzleHttp发送curl请求,调用API响应超时,导致抛出异常。尽管使用了catch(Exception)进行捕获,但没有处理异常,导致代码意外停止运行。后来查阅资料后得知。
前段时间在项目中遇到一个当时觉得比较奇怪的情况:使用 GuzzleHttp 发送 curl 请求,API 响应超时导致抛出异常。但 catch(\Exception) 并没有捕获异常,导致代码意外停止运行。后来查资料发现,在 PHP 7 中,GuzzleHttp 请求超时抛出的异常继承的是 Error,而 Error 并没有继承 Exception,所以 catch(\Exception) 无法捕获并处理该异常。
PHP 7 中对 Error 的处理
在 PHP 5 中,当程序中有致命错误发生时,脚本会立即停止运行。并且,通过 set_error_handler 设置的错误处理程序在这种情况下并不会被调用。
⒈ 自定义错误处理程序 set_error_handler
set_error_handler 接受两个参数,第一个为自定义的错误处理函数,第二个参数指定触发该自定义错误处理函数的错误级别。但需要指出的是,在任何时候,只能有一个自定义的错误处理程序起作用。

