当前位置:首页 > 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 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Cont…

php无限分类的实现

php无限分类的实现

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

php 实现秒杀

php 实现秒杀

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

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost…