什么是异常?
异常是一个描述 PHP 脚本错误或意外行为的对象。
许多 PHP 函数和类都会抛出异常。
用户定义的函数和类也可以抛出异常。
当函数遇到它无法使用的数据时,异常是一个很好的停止函数的方法。
抛出异常
throw 语句允许用户定义的函数或方法抛出异常。当异常被抛出时,其后面的代码将不会被执行。
如果异常没有被捕获,将会出现带有 "Uncaught Exception" 消息的致命错误。
让我们尝试抛出一个没有捕获的异常:
实例
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
echo divide(5, 0);
?>
运行实例 »点击 "运行实例" 按钮查看在线实例
结果将类似于以下内容:
Fatal error: Uncaught Exception: Division by zero in C:\webfolder\test.php:4
Stack trace: #0 C:\webfolder\test.php(9):
divide(5, 0) #1 {main} thrown in C:\webfolder\test.php on line 4
try...catch 语句
为了避免上面的示例中出现的错误,我们可以使用 try...catch 语句来捕获异常并继续处理。
语法
try {
可能抛出异常的代码
} catch(Exception $e) {
当捕获到异常时运行的代码
}
实例
当抛出异常时显示一条消息:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "无法进行除法运算。";
}
?>
运行实例 »点击 "运行实例" 按钮查看在线实例
catch 块指示应该捕获哪种类型的异常以及用于访问异常的变量名称。在上面的例子中,异常的类型是 Exception,变量名称是 $e。
try...catch...finally 语句
try...catch...finally 语句可以用于捕获异常。finally 块中的代码无论是否捕获到异常都会运行。如果 finally 存在,catch 块是可选的。
语法
try {
可能抛出异常的代码
} catch(Exception $e) {
当捕获到异常时运行的代码
} finally {
无论是否捕获到异常都会运行的代码
}
实例
当抛出异常时显示一条消息,然后指示过程已完成:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $e) {
echo "无法进行除法运算。";
} finally {
echo "过程已完成。";
}
?>
运行实例 »点击 "运行实例" 按钮查看在线实例
实例
即使未捕获到异常也输出一个字符串:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo "过程已完成。";
}
?>
运行实例 »点击 "运行实例" 按钮查看在线实例
异常对象
异常对象包含有关函数遇到的错误或意外行为的信息。
语法
new Exception(message, code, previous)
参数值
方法
当捕获异常时,下表显示了一些可用于获取有关异常信息的方法:
实例
输出有关抛出的异常的信息:
<?php
function divide($dividend, $divisor) {
if($divisor == 0) {
throw new Exception("Division by zero", 1);
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} catch(Exception $ex) {
$code = $ex->getCode();
$message = $ex->getMessage();
$file = $ex->getFile();
$line = $ex->getLine();
echo "在文件 $file 的第 $line 行抛出了异常:[代码 $code] \n$message";
}
?>
运行实例 »点击 "运行实例" 按钮查看在线实例
完整的异常参考手册
如需获取完整的参考,请访问我们完整的 PHP 异常参考手册。
该参考手册包含所有异常方法的描述和实例。
