当前位置:首页 > PHP

php异常实现

2026-01-29 22:07:39PHP

PHP 异常处理基础

PHP 异常处理通过 trycatchthrowfinally 关键字实现。异常用于在程序执行过程中遇到错误时改变正常流程。

try {
    // 可能抛出异常的代码
    if ($errorCondition) {
        throw new Exception("Error message");
    }
} catch (Exception $e) {
    // 处理异常
    echo "Caught exception: " . $e->getMessage();
} finally {
    // 无论是否抛出异常都会执行的代码
    echo "This always runs";
}

自定义异常类

可以继承 Exception 类创建特定于应用的异常类型,添加额外功能或特定错误信息。

php异常实现

class CustomException extends Exception {
    public function errorMessage() {
        return "Custom error on line {$this->getLine()} in {$this->getFile()}";
    }
}

try {
    throw new CustomException("Custom error");
} catch (CustomException $e) {
    echo $e->errorMessage();
}

多异常捕获

PHP 7.1+ 支持在单个 catch 块中捕获多种异常类型,简化代码结构。

php异常实现

try {
    // 可能抛出多种异常的代码
} catch (CustomException | OtherException $e) {
    // 处理两种异常
    echo $e->getMessage();
}

异常传播

未被捕获的异常会沿调用栈向上传播,直到被捕获或导致致命错误。可以设置全局异常处理器处理未被捕获的异常。

set_exception_handler(function($exception) {
    echo "Uncaught exception: " . $exception->getMessage();
});

// 这个异常如果没有被捕获,会触发全局处理器
throw new Exception("Uncaught");

PDO 异常处理

使用 PDO 进行数据库操作时,可以设置错误模式为异常模式,使数据库错误抛出异常而非返回错误代码。

$pdo = new PDO($dsn, $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {
    $stmt = $pdo->query("INVALID SQL");
} catch (PDOException $e) {
    echo "Database error: " . $e->getMessage();
}

最佳实践

  • 为特定错误条件创建专门的异常类
  • 在适当层级捕获异常,不要过早捕获无法处理的异常
  • 记录异常详细信息以便调试
  • 清理资源使用 finally
  • 避免空的 catch 块,至少要记录异常
try {
    $resource = acquireResource();
    // 使用资源
} catch (ResourceException $e) {
    logError($e->getMessage());
    throw $e; // 重新抛出给上层处理
} finally {
    if (isset($resource)) {
        releaseResource($resource);
    }
}

标签: 异常php
分享给朋友:

相关文章

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php实现支付宝支付

php实现支付宝支付

支付宝支付集成步骤 准备工作 在开始集成支付宝支付前,确保已注册支付宝开放平台账号并完成企业实名认证。创建应用后获取APPID、应用私钥和支付宝公钥。 配置支付宝SDK 通过Composer安装支付…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…