PHP 错误码常量定义

wen PHP项目 2

本文目录导读:

PHP 错误码常量定义

  1. 核心错误常量(E_ 系列)
  2. 错误处理相关返回值
  3. MySQL/PDO 错误码(部分示例)
  4. 自定义错误码定义
  5. 错误处理的实用函数
  6. PHP 8.0+ 新增错误类
  7. 实用示例
  8. 位运算和错误检查

在 PHP 中,错误码常量主要分为几大类,下面是完整的分类和定义:

核心错误常量(E_ 系列)

这些是最常用的错误级别常量:

// 致命错误(运行时)
E_ERROR = 1          // 致命运行时错误,脚本终止
E_WARNING = 2        // 运行时警告,脚本继续执行
E_PARSE = 4          // 编译时解析错误
E_NOTICE = 8         // 运行时通知,可能是bugs
E_CORE_ERROR = 16    // PHP 启动时致命错误
E_CORE_WARNING = 32  // PHP 启动时警告
E_COMPILE_ERROR = 64 // 编译时致命错误
E_COMPILE_WARNING = 128 // 编译时警告
E_USER_ERROR = 256   // 用户自定义错误
E_USER_WARNING = 512 // 用户自定义警告
E_USER_NOTICE = 1024 // 用户自定义通知
E_STRICT = 2048      // 编码标准化建议
E_RECOVERABLE_ERROR = 4096 // 可捕获的致命错误
E_DEPRECATED = 8192  // 弃用警告
E_USER_DEPRECATED = 16384 // 用户自定义弃用警告
E_ALL = 32767        // 所有错误(PHP 5.4+)

错误处理相关返回值

// 需要配合 set_error_handler() 使用
E_ERROR = 1
E_WARNING = 2
E_PARSE = 4
E_NOTICE = 8
// 错误处理函数的返回值
TRUE   // 错误已被处理
FALSE  // 错误未处理,继续向上传播

MySQL/PDO 错误码(部分示例)

PDO 错误码:

// SQLSTATE 错误码
'00000' // 成功
'42000' // 语法错误
'23000' // 违反约束
'HY000' // 一般错误

MySQL 原生错误码:

1064  // 语法错误
1045  // 认证失败
1049  // 数据库不存在
1146  // 表不存在
1451  // 外键约束失败

自定义错误码定义

// 应用级错误码示例
define('ERROR_SUCCESS', 0);
define('ERROR_NOT_FOUND', 404);
define('ERROR_VALIDATION', 422);
define('ERROR_SERVER', 500);
define('ERROR_UNAUTHORIZED', 401);
define('ERROR_FORBIDDEN', 403);
// 业务逻辑错误码
define('ERROR_USER_EXISTS', 1001);
define('ERROR_EMAIL_INVALID', 1002);
define('ERROR_PASSWORD_TOO_SHORT', 1003);

错误处理的实用函数

错误码转文字

function errorCodeToString($code) {
    $errors = [
        E_ERROR => 'Fatal Error',
        E_WARNING => 'Warning',
        E_PARSE => 'Parse Error',
        E_NOTICE => 'Notice',
        E_CORE_ERROR => 'Core Error',
        E_CORE_WARNING => 'Core Warning',
        E_COMPILE_ERROR => 'Compile Error',
        E_COMPILE_WARNING => 'Compile Warning',
        E_USER_ERROR => 'User Error',
        E_USER_WARNING => 'User Warning',
        E_USER_NOTICE => 'User Notice',
        E_STRICT => 'Strict Standards',
        E_RECOVERABLE_ERROR => 'Recoverable Error',
        E_DEPRECATED => 'Deprecated',
        E_USER_DEPRECATED => 'User Deprecated',
        E_ALL => 'All Errors'
    ];
    return isset($errors[$code]) ? $errors[$code] : 'Unknown Error (' . $code . ')';
}
// 使用示例
echo errorCodeToString(E_WARNING); // 输出: Warning

错误码检查

// 检查是否为致命错误
function isFatalError($errno) {
    return in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
}
// 检查是否为用户错误
function isUserError($errno) {
    return in_array($errno, [E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_USER_DEPRECATED]);
}

PHP 8.0+ 新增错误类

// PHP 8 引入了更多异常类
Error          // 所有错误的基类
TypeError      // 类型错误
ParseError     // 解析错误
AssertionError // 断言失败
ArithmeticError// 算术错误(如除零)
DivisionByZeroError // 除以零
ValueError     // 非法值

实用示例

完整的错误处理配置

// 开发环境显示所有错误
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 生产环境隐藏错误但记录日志
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
// 自定义错误处理器
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    $message = "[$errno] $errstr in $errfile on line $errline";
    error_log($message);
    if (in_array($errno, [E_USER_ERROR, E_ERROR])) {
        die('Fatal error occurred');
    }
    return true;
});

位运算和错误检查

// 错误码是位掩码,可以使用位运算
$reportedErrors = E_ALL & ~E_NOTICE & ~E_DEPRECATED;
// 检查错误是否被报告
if (error_reporting() & E_NOTICE) {
    echo 'E_NOTICE is reported';
}
// 组合错误码
$requiredErrors = E_ERROR | E_WARNING | E_PARSE;

这些错误码在 PHP 开发中非常重要,正确使用它们可以帮助你更好地调试代码和构建健壮的应用程序。

抱歉,评论功能暂时关闭!