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方法的描述和示例。