PHP 错误分类

1. 致命错误(Fatal Errors)

特性:

  • 代码执行立即终止。
  • 无法通过 set_error_handler() 处理,需使用 register_shutdown_function() 处理。
  • 典型错误包括:
    • E_ERROR(运行时致命错误)
    • E_PARSE(解析错误)
    • E_COMPILE_ERROR(编译时致命错误)
    • E_CORE_ERROR(PHP 核心致命错误)

示例:

// E_ERROR:调用未定义函数
undefined_function();

// E_PARSE:语法错误
eval(“echo ‘hello’; missing_semicolon”);

2. 警告(Warnings)

特性:

  • 仅提示,不影响程序继续执行。
  • 可通过 set_error_handler() 处理。
  • 典型错误包括:
    • E_WARNING(运行时警告)
    • E_COMPILE_WARNING(编译时警告)
    • E_CORE_WARNING(PHP 核心警告)

示例:

// E_WARNING:包含不存在的文件
include ‘non_existing_file.php’;

3. 通知(Notices)

特性:

  • 仅提示,代码继续执行。
  • 适用于潜在的错误。
  • 典型错误:E_NOTICE(运行时通知)

示例:

// E_NOTICE:未定义变量
echo $undefined_variable;

4. 用户级错误

特性:

  • trigger_error() 触发。
  • 适用于自定义错误处理。
  • 包括:
    • E_USER_ERROR(用户致命错误)
    • E_USER_WARNING(用户警告)
    • E_USER_NOTICE(用户通知)

示例:

// 触发 E_USER_WARNING
trigger_error(“自定义警告”, E_USER_WARNING);

5. 可恢复错误(Recoverable Errors)

特性:

  • E_RECOVERABLE_ERROR
  • 类似于 E_ERROR,但可以通过 set_error_handler() 处理,不会终止执行。

示例:

// E_RECOVERABLE_ERROR: 不兼容的参数类型
function test(int $a) {}
test(“string”);

6. 严格模式(Strict Standards)

特性:

  • E_STRICT
  • 提示不符合 PHP 未来版本的代码风格(PHP 7.0+ 被弃用)。

7. 弃用警告(Deprecation Warnings)

特性:

  • E_DEPRECATED(已弃用)
  • E_USER_DEPRECATED(用户弃用)
  • 表示某个函数或特性将在未来版本被删除。

示例:

// E_DEPRECATED:弃用函数
create_function(‘$a’, ‘return $a * 2;’);

完整错误等级表

错误类型 常量 说明
致命错误 E_ERROR 运行时致命错误,终止执行
解析错误 E_PARSE 语法错误,代码无法执行
编译错误 E_COMPILE_ERROR 编译阶段致命错误
核心错误 E_CORE_ERROR PHP 启动时发生的致命错误
可恢复错误 E_RECOVERABLE_ERROR 可通过 set_error_handler() 处理的致命错误
警告 E_WARNING 运行时警告,不影响程序执行
编译警告 E_COMPILE_WARNING 编译阶段警告
核心警告 E_CORE_WARNING PHP 启动时的警告
通知 E_NOTICE 运行时通知
用户自定义错误 E_USER_ERROR 用户触发的致命错误
用户自定义警告 E_USER_WARNING 用户触发的警告
用户自定义通知 E_USER_NOTICE 用户触发的通知
严格模式 E_STRICT 强制 PHP 遵循更严格的代码标准(已弃用)
弃用警告 E_DEPRECATED 运行时弃用警告
用户自定义弃用警告 E_USER_DEPRECATED 用户触发的弃用警告

如何捕获错误?

捕获所有错误

可以使用 error_reporting(E_ALL); 让 PHP 显示所有错误:

error_reporting(E_ALL);
ini_set(‘display_errors’, 1);

捕获致命错误

可以使用 register_shutdown_function()

function shutdownHandler() {
$error = error_get_last();
if ($error) {
echo “捕获到致命错误: ” . $error[‘message’];
}
}
register_shutdown_function(“shutdownHandler”);

 

作者 admin

百度广告效果展示