PHP 例外
什么是异常?
异常是描述 PHP 脚本的错误或意外行为的对象。
许多 PHP 函数和类都会抛出异常。
用户定义的函数和类也可能引发异常。
当函数遇到无法使用的数据时,异常是停止函数的好方法。
引发异常
这 throw
语句允许用户定义的函数或方法抛出异常。抛出异常时,其后面的代码将不会执行。
如果未捕获异常,则会发生致命错误,并显示“未捕获异常”消息。
让我们尝试抛出一个异常但不捕获它:
例子
<?php
函数除法($dividend,$divisor){
如果($divisor == 0){
抛出新的异常(“除以零”);
}
返回 $dividend / $divisor;
}
回声除法(5,0);
?>
亲自尝试 »
结果将会像这样:
致命错误: 未捕获的异常:C:\webfolder\test.html:4 中的除数为零
堆栈跟踪:#0 C:\webfolder\test.html(9):
除法(5,0)#1 {main} 投入 C:\webfolder\测试.html 在线的4
try...catch 语句
为了避免上述示例中的错误,我们可以使用 try...catch
语句捕获异常并继续该过程。
句法
尝试 {
可能引发异常的代码
} 捕获(异常 $e){
捕获到异常时运行的代码
}
例子
抛出异常时显示一条消息:
<?php
函数除法($dividend,$divisor){
如果($divisor == 0){
抛出新的异常(“除以零”);
}
返回 $dividend / $divisor;
}
尝试 {
回声除法(5,0);
} 捕获(异常 $e){
echo "无法分割。";
}
?>
亲自尝试 »
catch 块指示应捕获哪种类型的异常以及可用于访问异常的变量的名称。在上面的示例中,异常的类型是 Exception
变量名称是$e
.
try...catch...finally 语句
这 try...catch...finally
语句可用于捕获异常。代码中的finally
无论是否捕获到异常,块都会始终运行。如果finally
存在,catch
块是可选的。
句法
尝试 {
可能引发异常的代码
} 捕获(异常 $e){
捕获到异常时运行的代码
} 最后 {
无论是否捕获到异常,代码始终会运行
}
例子
当抛出异常时显示一条消息,然后表明该过程已结束:
<?php
函数除法($dividend,$divisor){
如果($divisor == 0){
抛出新的异常(“除以零”);
}
返回 $dividend / $divisor;
}
尝试 {
回声除法(5,0);
} 捕获(异常 $e){
echo "无法分割。";
} 最后 {
echo "进程完成。";
}
?>
亲自尝试 »
例子
即使未捕获到异常,也输出字符串:
<?php
函数除法($dividend,$divisor){
如果($divisor == 0){
抛出新的异常(“除以零”);
}
返回 $dividend / $divisor;
}
尝试 {
回声除法(5,0);
} 最后 {
echo "进程完成。";
}
?>
亲自尝试 »
异常对象
异常对象包含有关函数遇到的错误或意外行为的信息。
句法
新的异常(消息,代码,上一个)
参数值
范围 | 描述 |
---|---|
信息 | 可选。描述异常抛出原因的字符串 |
代码 | 可选。一个整数,可用于轻松区分此异常与同一类型的其他异常 |
以前的 | 可选。如果此异常是在另一个异常的 catch 块中引发的,建议将该异常传递给此参数 |
方法
当捕获异常时,下表显示了一些可用于获取有关异常的信息的方法:
方法 | 描述 |
---|---|
获取消息() | 返回描述异常抛出原因的字符串 |
获取上一个() | 如果此异常是由另一个异常触发的,则此方法返回前一个异常。如果不是,则返回 null |
获取代码() | 返回异常代码 |
获取文件() | 返回引发异常的文件的完整路径 |
获取行() | 返回引发异常的代码行的行号 |
例子
输出有关引发异常的信息:
<?php
函数除法($dividend,$divisor){
如果($divisor == 0){
抛出新的异常(“除以零”,1);
}
返回 $dividend / $divisor;
}
尝试 {
回声除法(5,0);
} 捕获(异常 $ex){
$code = $ex->获取代码();
$message = $ex->获取消息();
$文件 = $ex->获取文件();
$line = $ex->获取Line();
echo "$file 第 $line 行抛出异常: [代码 $code]
$消息”;
}
?>
亲自尝试 »
完整异常参考
如需完整参考,请访问我们的 完整的 PHP 异常参考.
该参考包含所有异常方法的描述和示例。