php异常实现
PHP 异常处理基础
PHP 使用 try-catch 块结构实现异常处理。异常是程序运行时发生的意外情况,通过抛出(throw)和捕获(catch)机制管理。
try {
// 可能抛出异常的代码
if ($condition) {
throw new Exception("错误消息");
}
} catch (Exception $e) {
// 处理异常
echo "捕获异常: " . $e->getMessage();
}
自定义异常类
通过继承 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("自定义错误");
} catch (CustomException $e) {
echo $e;
}
多异常捕获
PHP 支持捕获多种异常类型,根据异常类别执行不同处理逻辑。

try {
// 代码可能抛出多种异常
} catch (CustomException $e) {
// 处理自定义异常
} catch (Exception $e) {
// 处理其他异常
}
异常传播
未被捕获的异常会向上传播到调用栈,直到遇到匹配的 catch 块或导致致命错误。
function test() {
throw new Exception("测试异常");
}
try {
test();
} catch (Exception $e) {
echo "捕获传播的异常";
}
异常处理最佳实践
- 具体异常优先:先捕获具体异常,再捕获通用异常。
- 记录异常:使用
error_log或日志框架记录异常详情。 - 避免空 catch:至少记录或通知异常,避免静默失败。
- 资源清理:结合
finally块确保资源释放。
try {
$resource = acquireResource();
// 使用资源
} catch (Exception $e) {
error_log($e->getMessage());
throw $e; // 重新抛出
} finally {
if (isset($resource)) {
releaseResource($resource);
}
}
内置异常类型
PHP 提供多种内置异常类,如:
InvalidArgumentException:无效参数RuntimeException:运行时错误PDOException:数据库操作错误
try {
$pdo = new PDO("invalid_dsn");
} catch (PDOException $e) {
echo "数据库错误: " . $e->getMessage();
}






