PHP 异常处理
1. 什么是异常?
异常(Exception)是程序在运行过程中发生的非预期错误或行为。当发生异常时,程序的正常流程会被中断。
相比于传统的错误处理,异常机制允许开发者以更结构化的方式来处理错误。通过使用异常,您可以将错误处理逻辑从主要的业务逻辑中分离出来。
2. 抛出异常 - throw 关键字
在 PHP 中,使用 throw 语句可以手动触发一个异常。throw 语句通常用于验证输入或在检测到无法继续执行的情况时使用。
被抛出的必须是一个对象,通常是内置 Exception 类的一个实例。
代码示例:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("除数不能为零");
}
return $dividend / $divisor;
}
?>3. Try...Catch 语句
为了避免抛出的异常导致脚本终止,我们必须使用 try...catch 块来捕获并处理它。
- Try 块: 包含可能触发异常的代码。
- Catch 块: 如果
try块中发生了异常,代码执行将立即跳转到catch块中。
3.1 语法
try {
// 运行可能发生异常的代码
} catch(Exception $e) {
// 运行处理异常的代码
}3.2 实战示例
代码示例:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("除数不能为零");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "无法计算结果。";
}
?>4. Try...Catch...Finally 语句
finally 块可以跟在 catch 块之后,或者直接跟在 try 块之后(如果不打算捕获异常的话)。
无论是否抛出异常,也无论是否捕获了异常,finally 块中的代码始终会执行。这在释放资源(如关闭数据库连接或文件流)时非常有用。
代码示例:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("除数不能为零");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "捕获到异常: " . $e->getMessage();
} finally {
echo "。流程已结束。";
}
?>5. Exception 对象详解
Exception 对象包含了关于所发生错误的重要信息。通过调用该对象的方法,我们可以获取详细的上下文数据。
5.1 语法及构造函数
new Exception(message, code, previous)| 参数 | 描述 |
|---|---|
| message | 可选。描述异常原因的字符串。 |
| code | 可选。一个整数,可作为错误代码。 |
| previous | 可选。如果异常是在另一个异常中抛出的,可以用此参数引用前一个异常。 |
5.2 常用方法列表
当捕获到异常时,可以使用以下方法获取详情:
getMessage()- 返回描述异常的消息字符串。getPrevious()- 如果存在,返回上一个异常对象。getCode()- 返回异常代码。getFile()- 返回发生异常的文件全路径。getLine()- 返回发生异常的代码行号。
代码示例:
<?php
try {
throw new Exception("发生了一些错误", 404);
} catch(Exception $e) {
echo "消息: " . $e->getMessage() . "<br>";
echo "代码: " . $e->getCode() . "<br>";
echo "文件: " . $e->getFile() . "<br>";
echo "行号: " . $e->getLine();
}
?>