美文网首页
将你的php项目打造成重异常的项目

将你的php项目打造成重异常的项目

作者: 骑蚂蚁上高速_jun | 来源:发表于2020-02-28 09:58 被阅读0次

问题:在许多「重异常」(exception-heavy) 的编程语言中,一旦发生编译错误或Runtime异常,就会抛出异常,阻止或者继续运行。这确实是一个可行的方式。不过 PHP 语言却是一个 「轻异常」(exception-light) 的语言。在php项目中默认的产生 E_NOTICE 型异常时,并不会阻止脚本运行,除非产生严重错误。 不过可以通过配置 error_reporting 选项改变这一问题。

建议在项目开发中 不要把 error_reporting 报告级别调高。 反而建议将其调节到最低,在程序中去隐式去处理任何级别的异常或错误,这样才能更好优化你的代码而达到最好的性能。

在项目中 单入口启动加载脚本中 设置

error_reporting(E_ERROR | E_WARNING | E_NOTICE); // 将安全级别调至最低
或者 配置 php.ini 中的 error_reporting  E_ERROR | E_WARNING | E_NOTICE

在项目中编写全局异常捕获类 ExceptionHandle.php

**该种方式仅支持传统的 web项目,不支持swoole环境 swoole环境异常参考
**

ExceptionHandle.php 类核心代码:
// 主要捕获全局错误 
set_error_handler(function(int $errno,string $errstr,string $errfile,int $errline){
    // todo
        // 用于捕获运行时异常 包括 E_WARNING | E_NOTICE 级别的异常和警告
});
set_exception_handler(function(Throwable $e){
        // todo 主要用于捕获严重语法错误 或 开发者 手动抛出的异常

        // 返回异常类名,可根据异常类名知道异常的类型,做不同的修复和处理
        $className=get_class($e);
});
注意 : 在swoole 运行环境下不支持 这两个函数 捕获异常,必须在当前进程内使用
 try{} catch(Throwable $e){} 的方式捕获。
,但是swoole中  可通过register_shutdown_function来捕获致命错误,在进程异常退出时做一些清理工作

3 . 关于项目业务代码中的异常处理

1. 业务关键代码中,根据不同的业务,建议开发者手动抛出不同的异常。个人习惯使用 php
运行时内置异常 RuntimeException。当然关键代码建议手写异常类,实现Throwable 接口

...
throw new RuntimeException("参数params 不存在");
...

相关文章

网友评论

      本文标题:将你的php项目打造成重异常的项目

      本文链接:https://www.haomeiwen.com/subject/vorkhhtx.html