如何做好错误处理?(PHP篇)

时间:2023-03-09 16:05:30
如何做好错误处理?(PHP篇)

起因

之前我在封装 PHP 一个类库的时候,如果有遇到错误(例如构造函数传参不合法的话),则直接 die() ,后来发现这种方法很不好,会直接退出程序。

所以我想到给 PHP 上异常捕获的机制了。

错误处理的原则

1、一定要让 PHP 报告错误

2、在开发环境中要显示错误

3、在生产环境中不能显示错误

4、在开发和生产环境中都要记录错误

PHP 错误处理的种类

一、@

尽管我们可以在可能触发错误的函数前加上 @ 抑制符,不让 PHP 触发错误,但这有悖于常规做法,不建议这么做。

二、die()

因为 die() = exit() ,遇到错误直接退出,很不友好。

但是早期的一些 PHP 框架和类库还在使用这种方法,例如 codeigniter

三、Error

(1) 实例:


//错误处理函数
function MyError($level, $message, $file = '', $line = 0, $context = [])
{
//todo...
}
//设置错误处理函数
set_error_handler("MyError", E_ALL & ~E_NOTICE); //排除了 E_NOTICE,拦截没有必要的错误提示 // 触发错误
$test=2;
if ($test>1)
{
trigger_error("变量值必须小于等于 1",E_USER_WARNING);
} //恢复错误处理设置(可选)
//restore_error_handler()

(2) 错误处理函数 的参数(对应例子中的 MyError()

参数 描述
error_level 必需。为用户定义的错误规定错误报告级别。必须是一个数字。参见下面的表格:错误报告级别。
error_message 必需。为用户定义的错误规定错误消息。
error_file 可选。规定错误发生的文件名。
error_line 可选。规定错误发生的行号。
error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

(3) error_level (错误报告的级别)

| 值 | 常量 |描述 |

| :------------: |:-------------