php自定义错误处理函数转化为异常抛出

查看:149
本文介绍了php自定义错误处理函数转化为异常抛出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

各位大神好,最近在处理异常的时候忽然想到一个问题,使用php自定义错误函数:
set_error_handle()自定义错误处理函数将错误转化为异常抛出,代码如下:

set_error_handle($error,$errstr,$errfile,$errline){
    throw new Exception($errstr,$errno,0,$errfile,$errline);
}

这里是php发生错误时,将会抛出一个异常.
问题是,异常的抛出不是要在try{}和catch{}代码块中进行吗,错误的发生并不能确定在代码的什么位置,总不能把所有的代码都写在一个try{}代码块中吧,所以想请教各位大神,是不是抛出异常的操作不需要在try{}中进行,而是在任何位置都可以冷不丁的抛出个异常然后catch(Exception $e){}呢?如果是的话,那写try的目的又是什么呢?

问题补充:
下面一个大神的回答也是我之前考虑的一个地方,我也想到自定义全局的异常处理函数,之所以这样问其实只是想知道是不是异常要在try中抛出,为什么自定义错误处理函数可以抛出异常而不通过try,在try中抛出异常和错误函数里抛出有什么区别,其实这些是最想知道的 ^-^,谢谢各位啦!

解决方案

set_error_handler、set_exception_handler是最顶层的错误、异常拦截机制。

所有你预期到的很可能发生错误的地方,都应该使用try catch进行准确的异常处理
无法预期到的错误,使用set_error_handler、set_exception_handler来 指定一个函数 捕获所有未被捕获的异常屏蔽PHP默认的报错信息,并在脚本即将结束之前进行简单的错误处理。

简单点说,和try catch是配合使用的。
try catch可以多层嵌套、对不同类型的exception分别进行catch(exception类支持继承)等等。
set_error_handler、set_exception_handler可以视为最外层的try catch

还有一点很明显的区别:
try catch之后,处理好了异常问题,代码可以继续执行
set_error_handler、set_exception_handler执行完之后,脚本就结束了

问题里的那段代码,set_error_handler 写错了。。然后那段代码也没什么意义。。
把错误替换成异常,如果没有使用set_exception_handler处理的话,结果还是:

Fatal error: Uncaught exception

而已。

参考:
http://www.w3school.com.cn/ph...

这篇关于php自定义错误处理函数转化为异常抛出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆