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
广告