php gerr 统一的错误处理 v0
网站程序的错误处理,最常用的就是中断程序执行,显示给用户一个提示框,比如在控制器中使用 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,所有方法都为静态方法,无需也无法实例化.phprm.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 的函数示例:
function myerr() { if (false) { gerr::error('发生错误了', __FILE__, __LINE__, __FUNCTION__); return false; } return true }
本文地址:
转载随意,但请附上文章地址:-)
下一篇: php如何控制html元素的隐藏与显示