Php/php exceptions
来自菜鸟教程
PHP异常
什么是例外?
异常是描述PHP脚本的错误或意外行为的对象。
许多PHP函数和类均引发异常。
用户定义的函数和类也可能引发异常。
异常是在遇到无法使用的数据时停止该功能的好方法。
引发异常
The
throw
语句允许用户定义的函数或方法引发异常。引发异常时,将不执行其后的代码。
如果未捕获到异常,则会出现致命错误,并显示“未捕获的异常”消息。
让我们尝试引发一个异常而不捕获它:
例
<?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 {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
}
例
引发异常时显示一条消息:
<?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 "Unable to divide.";
}
?>
catch块指示应捕获的异常类型以及可用于访问异常的变量名称。在上面的示例中,异常类型为
Exception
变量名是
$e
.
try ... catch ... finally语句
The
try...catch...finally
语句可用于捕获异常。中的代码
finally
无论是否捕获到异常,block始终将运行。If
finally
存在,
catch
块是可选的。
句法
try {
code that can throw exceptions
} catch(Exception $e) {
code that runs when an exception is caught
} finally {
code that
always runs regardless of whether an exception was caught
}
例
引发异常时显示一条消息,然后指示该进程已结束:
<?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 "Unable to
divide. ";
} finally {
echo "Process complete.";
}
?>
例
即使未捕获到异常,也输出一个字符串:
<?php
function divide($dividend, $divisor) {
if($divisor == 0)
{
throw new Exception("Division by zero");
}
return $dividend / $divisor;
}
try {
echo divide(5, 0);
} finally {
echo
"Process complete.";
}
?>
异常对象
异常对象包含有关函数遇到的错误或意外行为的信息。
句法
new Exception(message, code, previous)
参数值
| 参数 | 描述 |
|---|---|
| 信息 | 可选的。一个字符串,描述为什么引发异常 |
| code | 可选的。一个整数,可用于轻松地将此异常与其他相同类型的异常区分开 |
| 以前 | 可选的。如果将此异常引发到另一个异常的catch块中,则建议将该异常传递到此参数中 |
方法
捕获异常时,下表显示了可用于获取有关异常信息的一些方法:
| 方法 | 描述 |
|---|---|
| getMessage() | 返回描述为什么引发异常的字符串 |
| getPrevious() | 如果此异常是由另一个异常触发的,则此方法将返回上一个异常。如果不是,则返回
null |
| getCode() | 返回异常代码 |
| getFile() | 返回引发异常的文件的完整路径 |
| getLine() | 返回引发异常的代码行的行号 |
例
输出有关引发的异常的信息:
<?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 "Exception thrown in $file on line
$line: [Code $code]
$message";
}
?>
完整的异常参考
有关完整的参考,请访问我们的 完整的PHP异常参考
.
该参考资料包含所有Exception方法的描述和示例。