本文目录导读:

在 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 开发中非常重要,正确使用它们可以帮助你更好地调试代码和构建健壮的应用程序。