异常处理
PHP 5有一个类似于其他编程语言的异常模型。异常处理非常重要,可以更好地控制错误处理。让我们解释一下与异常相关的新关键字。
- try - 使用异常的函数应该在“try”块中。如果异常未触发,则代码将继续正常进行。但是,如果异常触发,则会抛出异常。
- throw - 这是触发异常的方式。每个“throw”必须至少有一个“catch”。
- catch - “catch”块检索异常并创建包含异常信息的对象。
抛出异常时,不会执行语句后面的代码,PHP将尝试查找第一个匹配的catch块。如果没有捕获到异常,将发出一个PHP致命错误,其中包含“Uncaught Exception ...
- 可以抛出异常,并在PHP中捕获(“catch”)。代码可以在try块中包围。
- 每次try必须至少有一个相应的捕获块。可以使用多个catch块来捕获不同类别的异常。
- 可以在catch块中抛出(或重新抛出)异常。
以下是一段代码,将此代码复制并粘贴到文件中并验证结果。
<?php
try {
$error = '总是抛出这个错误';
throw new Exception($error);
// 不执行异常后的代码。
echo '永远不执行';
}catch (Exception $e) {
echo '捕获异常: ', $e->getMessage(), "\n";
}
// 继续执行
echo 'Hello World';
?>
在上面的示例中,$e->getMessage函数用于获取错误消息。可以从Exception类中使用以下函数。
- getMessage() - 异常消息
- getCode() - 异常代码
- getFile() - 源文件名
- getLine() - 源代码行
- getTrace() - 跟踪的数组
- getTraceAsString() - 格式化的跟踪字符串
创建自定义异常处理程序,您可以定义自己的自定义异常处理程序。使用以下函数设置用户定义的异常处理函数。
string set_exception_handler ( callback $exception_handler )
这里,exception_handler是发生未捕获的异常时要调用的函数的名称。必须在调用set_exception_handler()之前定义此函数。
<?php
function exception_handler($exception) {
echo "捕获异常: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('未捕获的异常');
echo "不会执行\n";
?>
提示:在后面的章节会介绍错误处理的完整函数集。