php异常和错误处理
16lz
2021-01-22
--php中的异常和错误的概念是有区别的,所以处理机制也有所不同,也不会相互捕获
但是可以通过ErrorException利用自定义错误函数将错误转换成异常
而抛出异常的地方自然可以直接变成抛出错误
-*****-
--异常处理机制
throw抛出的异常实例必须是或继承于Exception
--try{throw New Exception($errmsg, $errtype)}catch{...}处理机制
catch必须紧接在try结构后面,throw必须放在try结构里面,每种类型的throw必须有对应的catch
当异常抛出,抛出异常时所在的代码块的代码将不会继续执行,而是尝试查找第一个能与之匹配的 catch,执行完毕后跳转到最后一个 catch 的后面继续执行
--自定义函数处理机制
set_exception_handler($callbackexc)
回调函数callbackexc(Exception $exc)
此种方式下throw可以不必放在try结构中
如果try结果没有匹配到对应的catch就会采用这种机制,否则产生错误
调用自定义处理函数后,脚本停止执行
-*****-
--错误分级,通过一系列的常量来区别,通过位运算进行相互组合,以获得其他级别
--php处理机制
php.ini.error_reporting/error_reporting()设置错误级别
php.ini.display_errors错误是否浏览器显示
php.ini.log_errors/error_log错误是否输出到文件,错误文件位置
--自定义函数处理机制
set_error_handler($callback, $errtype)
回调函数$callback( int $errcode , string $errmsg [, string $errfile [, int $errline [, array $errcontext ]]] )
错误级别$errtype,设置捕获的错误级别,不受error_reporting()和php.ini影响,未过滤的错误级别,仍被默认机制捕获,此参数丢失捕获所有错误
解析错误或致命的运行时错误,仍被默认机制捕获
--错误产生方式
系统自动抛出的错误
trigger_error($errmsg, $errtype)/user_error手动抛出的错误,当$errtype不等于E_USER_*时,$errmsg自动替换成Invalid error type specified,$errtype自动替换成2/E_WARNING
但是可以通过ErrorException利用自定义错误函数将错误转换成异常
而抛出异常的地方自然可以直接变成抛出错误
-*****-
--异常处理机制
throw抛出的异常实例必须是或继承于Exception
--try{throw New Exception($errmsg, $errtype)}catch{...}处理机制
catch必须紧接在try结构后面,throw必须放在try结构里面,每种类型的throw必须有对应的catch
当异常抛出,抛出异常时所在的代码块的代码将不会继续执行,而是尝试查找第一个能与之匹配的 catch,执行完毕后跳转到最后一个 catch 的后面继续执行
--自定义函数处理机制
set_exception_handler($callbackexc)
回调函数callbackexc(Exception $exc)
此种方式下throw可以不必放在try结构中
如果try结果没有匹配到对应的catch就会采用这种机制,否则产生错误
调用自定义处理函数后,脚本停止执行
-*****-
--错误分级,通过一系列的常量来区别,通过位运算进行相互组合,以获得其他级别
--php处理机制
php.ini.error_reporting/error_reporting()设置错误级别
php.ini.display_errors错误是否浏览器显示
php.ini.log_errors/error_log错误是否输出到文件,错误文件位置
--自定义函数处理机制
set_error_handler($callback, $errtype)
回调函数$callback( int $errcode , string $errmsg [, string $errfile [, int $errline [, array $errcontext ]]] )
错误级别$errtype,设置捕获的错误级别,不受error_reporting()和php.ini影响,未过滤的错误级别,仍被默认机制捕获,此参数丢失捕获所有错误
解析错误或致命的运行时错误,仍被默认机制捕获
--错误产生方式
系统自动抛出的错误
trigger_error($errmsg, $errtype)/user_error手动抛出的错误,当$errtype不等于E_USER_*时,$errmsg自动替换成Invalid error type specified,$errtype自动替换成2/E_WARNING
更多相关文章
- APMServ 在 Win7 下出现“APMServ-Apache 服务因 函数不正确。
- 从。net调用Magento API,并得到“位于XYZ的HTTP服务太忙”的错误
- 我得到了“致命错误:未捕获的SoapFault异常:[客户机]SoapClient:
- ajax php bomt头 utf-8带来的奇怪问题。。返回值false 判断也是f
- 编译php时遇到的错误
- MySQL错误1046:未选择数据库
- 解析错误:语法错误,E:\xampp\htdocs\online\viewhistory >中
- PHP实现接口方法时出现致命错误
- JSON解析错误:无法识别的标记'<'处于角度