PHP 7 错误处理

PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。

这种 Error 异常可以像 [Exception]异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 [catch]块,则调用异常处理函数(事先通过 [set_exception_handler()]注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。

Error 类并非继承自 [Exception] 类,所以不能用 catch (Exception $e) { ... } 来捕获 Error。你可以用 catch (Error $e) { ... },或者通过注册异常处理函数( [set_exception_handler()])来捕获 Error
一个完整的实例是:

       try {
            $this->_startTime = microtime(true);
            $this->_beforeRun();

            $this->run();

            $this->_afterRun();
        } catch (\Exception $e) {//主动throw异常抛出
            $code = $e->getCode();
            $msg = $e->getMessage();
            $log = 'exp,code:'.$code.',msg:'.$msg;
            $code = $code ? $code : 1;
            $this->error($msg,array(),$code);
            Core::write($log,Core::LEVEL_EXCEPTION,'que');
        }catch (\Error $error){//异常错误捕获,如果不设置Error捕获,则会落到相应的nginx日志里
            $code = $error->getCode();
            $msg = $error->getMessage();
            $log = 'error,code:'.$code.',msg:'.$msg;
            $code = $code ? $code : 1;
            $this->error($msg,array(),$code);
            Core::write($log,Core::LEVEL_NOTICE,'que');
        }

补充说明:例如函数不存在,语法错误,参数类型不正确等都属于Error级别的错误。由Error捕获

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 请一定要注意,没有特殊说明:本例 ****PHP Version < 7说起PHP异常处理,大家首先会想到try-...
    凌乱秋天阅读 2,649评论 1 0
  • 先聊一聊 前几天在做一个用到file_get_contents去定时提取改退签规则和免费行李额的小需求,每天抓一次...
    孙小胖2018阅读 3,816评论 0 1
  • 开篇一题:问:此脚本执行输出什么,如果出现错误如何捕获处理错误? 请先思考一下,然后带着问题来看一下PHP的错误与...
    幽思片羽阅读 3,619评论 0 0
  • #超级学习体#自我发展心理学10# 课题分离是著名心理学家阿德勒(Alfred Adler)提出的一个理论,指的就...
    怡然思语阅读 3,003评论 0 1
  • 人生第二十个秋,在远离家乡千公里外的地方。今年的秋来得急促,都忘了告诉还在茂盛生长的路边野草一声,树叶就在一夜之间...
    101ddbb28c89阅读 1,222评论 0 3