php异常处理机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
php异常处理机制
php异常我们常接触到的就是error错误码1,warning错误码2,notice错误码8这三类。
出现error了系统是挂掉了,但是warning和notice是我们可以捕捉并处理的
php配置项
display_errors=On On将错误显⽰到浏览器上,不管是On还是Off都会记录到你错误⽇志⾥⾯,前提是配置了错误⽇志log_errors和error_log error_reporting 设置错误报告级别,这个与display_errors和error_log有关,只会将对应的错误记录在错误⽇志或者打印到浏览器上
php错误处理机制
php本⾝有⼀套错误处理机制,就是通过display_errors error_reporting来控制
所以默认情况下,在代码出现问题,notice warning等消息时,会直接打印到浏览器上,⽽且还会继续往下执⾏,这个时候你通过 try catch 根本捕捉不到,这就和我理解的不太⼀样,
因为我以为的会是错误直接被我catch捕捉到,
所以php的try catch 能捕捉到的只能是你⾃⼰ throw new Exception("");的错误,throw之后的语句会进⼊到catch中继续执⾏。
如果你想抛弃php⾃⾝的错误处理机制,这个时候可以通过set_error_handler这个函数,⾃定义⼀个函数⽤来处理,再这个函数中你可以抛出异常,然后再通过catch捕捉到异常。
这样的意义就是,当出现notice和warning时,⽐如在mysql连接失败时,会出现warning,但是这个warning你⼜不能直接通过catch捕捉到,不考虑关闭display_errors,
然后设置error_reporting,通过判断connect返回的句柄,来⼿动throw抛出异常
set_error_handler()也不能⽤来处理所有的错误级别,官⽅⼿册上是这样说的:
The following error types cannot be handled with a user defined function:
E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING,
and most of E_STRICT raised in the file where set_error_handler() is called.
最后再提供⼀个⼩技巧,对于需要使⽤第三⽅类的时候可以考虑这样⼦
1.通过__call()⽅法,这样做的好处就是避免了,再使⽤没有定义的⽅法的时候,会报error的错误,error是会让整个系统挂掉的。
2.第⼆个⽅⾯配合set_error_handler()⽅法设置的⾃定义错误处理函数,就相当于在调⽤函数⽅法的过程中就已经封装了异常处理,我们只需要判断函数处理结果是false(或者是其他的⼀个字符串)就好了。
可以⽤来判断函数是否调⽤失败,⽐如connect。
还有⼀点需要注意的是,php throw出来的异常,必须要catch到,不然会报错。
php的异常也像JAVA的异常的⼀样,可以在最外层catch捕捉,也可以在throw的地⽅捕捉。