当前位置:首页 > 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 类创建特定于应用的异常类型,添加额外功能或特定错误信息。

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 块中捕获多种异常类型,简化代码结构。

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

异常传播

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

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

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

PDO 异常处理

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

php异常实现

$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中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php无限分类的实现

php无限分类的实现

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

php 购物车实现session

php 购物车实现session

PHP 购物车实现(基于 Session) 在 PHP 中,使用 Session 实现购物车功能是一种常见方法。Session 可以跨页面存储用户数据,适合临时保存购物车信息。 初始化 Sessio…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (flock…

php array实现

php array实现

PHP 数组实现 PHP 数组是一种灵活的数据结构,可以存储多个值。以下是几种常见的实现方式: 索引数组 索引数组使用数字作为键名,默认从0开始递增。 $fruits = array("Apple…