PHP异常处理中的黑科技
前面提到框架中是可以捕获所有的错误和异常的,之所以能实现应该是使用了黑科技,哈哈!其实也不是什么黑科技,主要是三个重要的函数:
1. set_error_handler()
看到这个名字估计就知道什么意思了,这个函数用于捕获错误,设置一个用户自定义的错误处理函数。
当程序出现错误的时候自动调用此方法,不过需要注意一下两点:
第一,如果存在该方法,相应的error_reporting()
就不能在使用了。所有的错误都会交给自定义的函数处理。
第二,此方法不能处理以下级别的错误:E_ERROR
、E_PARSE
、 E_CORE_ERROR
、 E_CORE_WARNING
、 E_COMPILE_ERROR
、 E_COMPILE_WARNING
,set_error_handler()
函数所在文件中产生的E_STRICT
,该函数只能捕获系统产生的一些Warning
、Notice
级别的错误。
并且他有多种调用的方法:
2. register_shutdown_function()
捕获PHP的错误:Fatal Error
、Parse Error
等,这个方法是PHP脚本执行结束前最后一个调用的函数,比如脚本错误、die()、exit、异常、正常结束都会调用,多么牛逼的一个函数啊!
通过这个函数就可以在脚本结束前判断这次执行是否有错误产生,这时就要借助于一个函数:error_get_last()
;
这个函数可以拿到本次执行产生的所有错误。error_get_last()
;
返回的信息:
- [type] - 错误类型
- [message] - 错误消息
- [file] - 发生错误所在的文件
- [line] - 发生错误所在的行
3:set_exception_handler()
设置默认的异常处理程序,用在没有用try/catch块来捕获的异常,也就是说不管你抛出的异常有没有人捕获,如果没有人捕获就会进入到该方法中,并且在回调函数调用后异常会中止。