当前位置:首页 > PHP教程 > php高级应用 > 列表

php gerr 统一的错误处理 v0

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-24 17:28:04 浏览: 评论:0 

一般统一的错误处理机制是使用[异常],PHP也提供了异常的功能,但异常对概念及知识面都有要求,才能用好,为避免复杂,所以不使用异常作为统一的错误处理.

网站程序的错误处理,最常用的就是中断程序执行,显示给用户一个提示框,比如在控制器中使用 showmessage() 进行错误提示,所以,在控制器中直接使用 showmessage() 中提示即可.

不过,showmessage() 并不适合在类方法及函数中使用,因为有时调用者需要自己对错误进行处理,比如,错误提示使用 JS 的 alert() 弹出,而不是显示一个 html 页面,因此,要统一的是类方法中及函数中的错误处理.

保守的写法是函数返回 true 或 false,并通过比如传地址的参数传递错误信息:

bool func_name(& $error)

类方法则在类中定义一个 get_error() 之类的方法返回最后一次错误信息.

但是,当出现多层调用时,比如 调用者 -> A() -> B() -> C() ,在 C 函数中出现错误,这种方式要传递错误信息就很麻烦了:B() 要处理并兼容 C() 的错误处理,A() 要兼容 B() 的错误处理.

只有异常才很“自然”地支持错误信息的向上传递,手动模拟的向上传递代码写起来都很麻烦,不愿意写.

网站程序的错误处理,就是想在发生错误时默认就给用户一个提示并中断程序执行,并且当调用者需要自定义如何处理错误时允许调用者自定义.

所以,统一的错误处理就是默认直接对用户进行中断提示,比如数据库插入错误,又允许调用者需要的时候可以自定义处理错误,比如使用 JS 弹出错误信息.

于是,引入 gerr 类统一网站程序的错误处理:

gerr 类位于 /include/gerr.class.php,类名为 gerr,所有方法都为静态方法,无需也无法实例化.phpfensi.com

当方法或函数中出现错误时,调用 gerr::error() 设置错误信息并返回 false.

默认 gerr::error() 会调用 showmessge() 进行错误提示。

当调用者需要自定义处理错误时,可以调用 gerr::func_set() 设置一个自定义的错误处理函数,gerr::error() 便会调用调用者设置的错误处理函数进行错误处理.

一般来说错误处理方式都是由控制器决定的,所以 gerr::func_set() 一般是在控制器中调用。可以使用 gerr::func_reset() 把错误处理函数重置为默认函数。

在方法和函数中,可以使用 gerr::check() 检查是否已发生错误(一般发生错误都需要中断程序执行,不中断继续执行只会发生更多的错误),防止已发生的错误未被处理.

若类方法或函数使用“流程”的形式组织(比如要先 fopen 后才能 fwrite),在流程开始时调用 gerr::start() 让 gerr 进行流程的初始化,在流程成功完成后调用 gerr::end() 通知 gerr 流程已结束。

可以使用 gerr::get() 取得错误信息。

一个使用 gerr 的函数示例:

  1. function myerr()   
  2. {   
  3. if (false)   
  4. {   
  5. gerr::error('发生错误了'__FILE____LINE____FUNCTION__);   
  6. return false;  //开源软件:phpfensi.com 
  7. }   
  8. return true   
  9. }

Tags: php统一错误 php错误处理

分享到:

相关文章