PHP项目异常类该如何设计,将你的php项目打造成重异常的项目

问题:在许多「重异常」(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 不存在");

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值