PHP 抛出异常


简介

Throwable 接口由 Error 和 Exception 类实现。所有预定义的 Error 类都继承自 Error 类。相应 Error 类的实例在 try 块内抛出并在相应的 catch 块内处理。

抛出错误

正常执行(当 try 块内没有抛出异常时)将在随后定义的最后一个 catch 块之后继续。

示例

 在线演示

<?php
function div($x, $y) {
   if (!$y) {
      throw new Exception('Division by zero.');
   }
return $x/$y;
}
try {
   echo div(10,5) . "
";    echo div(10,0) . "
"; } catch (Exception $e) {    echo 'Caught exception: ', $e->getMessage(), "
"; } // Continue execution echo "Execution continues
"; ?>

输出

显示以下输出

2
Caught exception: Division by zero.
Execution continues

在以下示例中,在执行函数时抛出 **TypeError**,因为没有向其传递适当的参数。显示相应的错误消息

示例

 在线演示

<?php
function add(int $num1, int $num2){
   return $num1 + $num2;
}
try {
   $value = add(1, 'one');
} catch (TypeError $e) {
   echo $e->getMessage(). "
"; } ?>

输出

显示以下输出

Argument 2 passed to add() must be of the type integer, string given

SPL 异常

标准 PHP 库包含预定义的异常

LogicException表示程序逻辑错误的异常。
BadFunctionCallException 如果回调引用未定义的函数或缺少某些参数,则抛出此异常。
BadMethodCallException 如果回调引用未定义的方法或缺少某些参数,则抛出此异常。
DomainException如果值不符合定义的有效数据域,则抛出此异常。
InvalidArgumentException 如果参数不是预期类型,则抛出此异常。
LengthException如果长度无效,则抛出此异常。
OutOfRangeException请求非法索引时抛出此异常。
RuntimeException如果发生只能在运行时发现的错误,则抛出此异常。
OutOfBoundsException如果值不是有效的键,则抛出此异常。
OverflowException向已满的容器添加元素时抛出此异常。
RangeException抛出此异常以指示程序执行期间的范围错误。除下溢/上溢以外的算术错误。
UnderflowException对空容器执行无效操作(例如删除元素)时抛出此异常。
UnexpectedValueException 如果值与一组值不匹配,则抛出此异常。

以下示例显示当在 PHP 数组中找不到键时抛出的 **OutOfBoundsException**

示例

 在线演示

<?php
$arr=array("one"=>1, "two"=>2,"three"=>3,"four"=>4);
$key="ten";
try{
   if (array_key_exists($key, $arr)==FALSE){
      throw new OutOfBoundsException("key not found");}
   else {
      echo $arr[$key];}
   }
   catch (OutOfBoundsException $e){
      echo $e->getMessage(). "
"; } ?>

输出

显示以下输出

key not found

更新于: 2020-09-18

281 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告