php异常实现
PHP 异常处理基础
PHP 异常处理通过 try、catch、throw 和 finally 关键字实现,用于捕获和处理运行时错误。异常是程序执行过程中出现的意外情况,例如数据库连接失败、文件不存在等。
try {
// 可能抛出异常的代码
if ($fileNotFound) {
throw new Exception("File not found");
}
} catch (Exception $e) {
// 处理异常
echo "Error: " . $e->getMessage();
} finally {
// 无论是否发生异常都会执行的代码
echo "Cleanup here";
}
自定义异常类
通过继承 Exception 类可以创建自定义异常,以便更精确地描述特定错误类型。
class CustomException extends Exception {
public function __construct($message, $code = 0) {
parent::__construct($message, $code);
}
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
}
}
try {
throw new CustomException("Custom error occurred");
} catch (CustomException $e) {
echo $e;
}
多重异常捕获
可以捕获多种不同类型的异常,并根据异常类型执行不同的处理逻辑。
try {
// 可能抛出多种异常的代码
} catch (CustomException $e) {
echo "Custom exception: " . $e->getMessage();
} catch (Exception $e) {
echo "Generic exception: " . $e->getMessage();
}
异常处理最佳实践
- 在可能失败的代码块周围使用
try-catch - 抛出异常时提供有意义的错误信息
- 根据不同的错误类型创建特定的异常类
- 在
finally块中释放资源,如关闭文件或数据库连接 - 记录异常信息以便调试
try {
$db = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
// 数据库操作
} catch (PDOException $e) {
error_log("Database error: " . $e->getMessage());
echo "A database error occurred. Please try again later.";
} finally {
$db = null; // 确保连接关闭
}
异常与错误处理
PHP 7+ 引入了 Throwable 接口,它是 Exception 和 Error 的共同父接口,可以捕获致命错误。
try {
// 可能抛出异常或错误的代码
} catch (Throwable $t) {
echo "Caught throwable: " . $t->getMessage();
}
全局异常处理
通过设置自定义异常处理函数可以捕获未被捕获的异常。
set_exception_handler(function ($exception) {
echo "Uncaught exception: " . $exception->getMessage();
});
// 后续代码中未被捕获的异常将调用此处理程序






