当前位置: 首页 > 后端技术 > PHP

PHP优雅地捕获和处理错误——E_PARSE-E_ERROR

时间:2023-03-30 03:31:09 PHP

开发中使用的大部分框架都可以优雅地回显语法级别的错误,即ParseError(语法错误)E_PARSE。这个错误是最面向用户的代码。如何捕捉潜在的错误?下面主要讲一下如何捕获E_PARSE&E_ERROR错误。这里我特意把E_PARSE错误放在第一位,因为E_PARSE对于用户脚本来说是第一个错误,也就是说,有就一定先发生。然后就是E_ERROR&E_WARNING&E_NOTICE等运行时错误....PHP错误级别#一些系统级用户代码的错误类型可以通过try...catch...E_PARSEParsingerrorSyntaxparsingerror分号少,逗号多E_ERROR等致命错误函数或方法#可以被set_error_handler捕获E_WARNING运行时警告调用未定义的变量E_NOTICE运行时提醒E_DEPRECATED运行时弃用的函数或方法#一些与ZendEngine内存错误相关的错误也应该通过try...catch传递。..capture有点难测试E_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING#用户级自定义错误可以通过trigger_error触发,可以通过set_error_handler捕获处理向前兼容)E_STRICT部分catchestry...catch...部分set_error_handlerE_RECOVERABLE_ERROR先看一些问题codes天真的想法1.想关闭所有错误报告'语法错误,文件意外结束,需要\',\'或\';\'','string'=>'','code'=>0,'file'=>'...\lib.php','line'=>2,'trace'=>array(),'previous'=>NULL,))这样就可以得到ParseError优雅地出错,只是包装它并输出给用户。ParseError可以说是用户级别最高级别的错误,ParseError之后用户脚本就退出了。那么我们可能会遇到E_ERROR&E_WARNING&E_NOTICE&E_DEPRECATED等,如下:exception){var_export($exception);}catch(\Error$error){//就是这样,trycatchcatchedErrorvar_export($error);}运行结果Error::__set_state(array('message'=>'调用未定义函数func_not_exists()','string'=>'','code'=>0,'file'=>'...main.php','line'=>47,'trace'=>array(),'previous'=>null,))如上,语法没有问题,所以不会出现ParseError,ZendEngine开始加载脚本解释执行,因为一个方法没有exist被调用,E_ERROR被我们触发并捕获。完善的错误收集try...catch可以捕获E_PARSE&E_ERRORset_error_handler可以捕获E_WARNING&E_NOTICE&E_DEPRECATED&E_USER_*组合捕获大部分用户代码级别的错误