php自定义错误处理,PHP自定义错误处理

try、catch异常与错误处理

和其它高级语言相同,PHP也提供了try{}catch(){}异常捕获机制。相信每一个开发者都会在自己的代码中用到异常捕获来处理未知的异常!甚至是自定义异常,然后在代码中抛出自定义异常来实现错误处理。

<?phptry  {//unsignedInt是一个变量,必须为正数,否则异常$unsignedInt = -1;if ($unsignedInt < 0)  {//判断$unsigendInt为非正数时抛出异常throw new \Exception('非正数!');}//$unsignedInt为正数则正常打印var_dump($unsignedInt);}  catch(\Exception $e) {//记录异常日志log($e->getMessage());}

如上案例,我们可以知道异常捕获可以帮助我们及时处理自定义错误异常或者未知异常,保证代码的稳定性、健壮性。

虽然好用,但是PHP实现异常捕获的底层比较繁琐,如果大量嵌套使用异常捕获会导致代码可读性较差、性能下降等问题。于是我们可以采用另一种方式来实现错误处理。尤其是用在代码分层较多的大项目中,可以很好的规范开发错误处理流程,提高代码可读性。下面我们看下具体实现代码:

自定义错误处理模块代码实现

<?phpnamespace  error;class ErrorCode{const SUCCESS = '0'; //0表示成功const FAILURE = -1;const FAILURE_STRING = '-1';}<?phpnamespace error;class ErrorMsg{/*** 定义错误描述信息* @var array*/public static $errMsg = [ErrorCode::SUCCESS => '操作成功',ErrorCode::FAILURE => '操作失败',ErrorCode::FAILURE_STRING => '操作失败',];/*** 获取错误描述信息* @param $errCode* @return string*/public static function getErrMsg($errCode){return isset(self::$errMsg[$errCode]) ? self::$errMsg[$errCode] : self::getDefaultMsg();}/*** 获取默认的错误描述信息* @return string*/public static function getDefaultMsg(){return '服务器错误';}}

我们首先要实现错误码和错误信息两个类,他们是一一对应的关系,用于统一管理错误定义。这样将自定义错误异常都放在一起,大大提高了错误码和错误信息的可扩展性。

如上,是我们定义的错误载体类,它可以收集错误信息(错误码、错误消息、日志消息)。用于后续处理流程。

<?phpnamespace  error;trait ReturnErrorTrait {/*** @param string $errCode 错误码* @param string $logMessage 日志信息* @param string $errMessage 重写提示信息,用于直接返回前端信息*/public static function setAndReturn($errCode, $logMessage = '',$errMessage=''){ErrorInfo::setAndReturn($errCode, $logMessage,$errMessage);return false;}public static function getErrCode(){$errCode = ErrorInfo::getErrCode();if ($errCode == '') {$errCode = ErrorCode::SUCCESS;}return $errCode;}public static function getErrMsg(){return ErrorInfo::getErrMsg();}public static function getLogMsg(){return ErrorInfo::getLogMsg();}public function getAllFirstErrorMessage(){if(empty($this->firstErrors)){return '';}return implode(';', $this->firstErrors);}public static function cleanErrorInfo(){ErrorInfo::cleanErrorInfo();}}

最后,我们定义统一的对外接口放在PHP的trait特性中。这样就可以方便的将错误处理模块引入到自己的代码中使用了。

自定义错误处理模块应用

如上我们example类中在使用JudgeUnsignedInt类的方法判断数字是否大于零,如果非大于0则返回错误。example就可以自己决定如何处理错误。这样的机制可以层层深入,底层错误也可以层层上传,到不同的上层模块然后由各个上层模块决定错误如何处理,逻辑清晰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值