在 PHP 中,你可以使用 try-catch 块来捕获和处理异常(Exceptions)和错误(Errors)。以下是几种不同的捕获方式:
try {
// 可能会抛出异常的代码
$result = someFunctionThatMightFail();
} catch (Exception $e) {
// 捕获并处理异常
echo '捕获到异常: ', $e->getMessage(), "\n";
// 可以记录日志或进行其他处理
}
PHP 7.0+ 支持捕获特定类型的异常:
try {
// 代码
} catch (InvalidArgumentException $e) {
// 处理无效参数异常
} catch (RuntimeException $e) {
// 处理运行时异常
} catch (Exception $e) {
// 处理所有其他异常
}
从 PHP 7 开始,大多数错误被转换为 Error 异常,可以被捕获:
try {
// 可能产生错误的代码,如调用不存在的函数
nonExistentFunction();
} catch (Error $e) {
echo '捕获到错误: ', $e->getMessage(), "\n";
}
PHP 7.1 引入了捕获多种异常类型的能力:
try {
// 代码
} catch (TypeError | DivisionByZeroError $e) {
// 处理类型错误或除以零错误
echo $e->getMessage();
}
try {
// 代码
} catch (Throwable $e) { // Throwable 是 Exception 和 Error 的基类
echo '错误信息: ' . $e->getMessage() . "\n";
echo '错误代码: ' . $e->getCode() . "\n";
echo '错误文件: ' . $e->getFile() . "\n";
echo '错误行号: ' . $e->getLine() . "\n";
echo '堆栈跟踪: ' . $e->getTraceAsString() . "\n";
}
你可以创建自己的异常类:
class MyCustomException extends Exception {}
try {
if ($somethingWrong) {
throw new MyCustomException('自定义错误消息');
}
} catch (MyCustomException $e) {
echo '捕获到自定义异常: ' . $e->getMessage();
}
你还可以设置全局异常处理器:
set_exception_handler(function (Throwable $e) {
echo "全局异常处理: " . $e->getMessage();
// 记录到日志文件等
});
// 未捕获的异常将由此处理
记住,try-catch 块应该用于处理你预期可能发生的异常情况,而不是用来掩盖所有错误。良好的错误处理是编写健壮应用程序的关键部分。