PHP 自定义异常处理
在PHP中,自定义异常处理是通过创建自定义异常类并使用 try-catch
语句块来实现的。下面是一个简单的示例,展示如何定义自己的异常类以及如何在代码中使用它们。
定义自定义异常类
首先,你需要创建一个继承自内置的 \Exception
类或其子类(如 \RuntimeException
)的自定义异常类。这样可以保留原有异常类的功能,并根据需要添加自定义的属性和方法。
<?php
class CustomException extends Exception
{
// 可以在这里添加自定义的构造函数、属性或方法
public function __construct($message = "", $code = 0, Throwable $previous = null)
{
// 调用父类构造函数
parent::__construct($message, $code, $previous);
}
// 示例:添加一个额外的日志记录方法
public function logException()
{
error_log("Custom exception occurred: " . $this->getMessage());
}
}
使用自定义异常
接下来,在你的代码中使用 try-catch
语句捕获异常,并在适当情况下抛出自定义异常。
<?php
// 引入自定义异常类(如果不在同一文件中)
require_once 'CustomException.php';
function doSomethingRisky()
{
// 这里执行可能会出错的代码
$someCondition = false;
if (!$someCondition) {
// 抛出自定义异常
throw new CustomException("A risky condition was met.", 400);
}
}
try {
// 尝试执行可能抛出异常的代码
doSomethingRisky();
} catch (CustomException $e) {
// 处理自定义异常
echo "Caught custom exception: " . $e->getMessage();
$e->logException(); // 调用自定义异常中的日志记录方法
} catch (Exception $e) {
// 处理其他类型的异常
echo "Caught a generic exception: " . $e->getMessage();
} finally {
// (可选)finally块总会被执行,无论是否发生异常
echo "This block will always execute.";
}
?>
在这个例子中,doSomethingRisky
函数可能会抛出一个 CustomException
。通过在调用该函数的代码周围放置 try-catch
块,你可以捕获这个异常并采取适当的措施,比如输出错误信息、记录日志或进行错误恢复操作。