PHP 抛出异常

phpserver side programmingprogramming更新于 2025/8/20 0:37:17

简介

Error 和 Exception 类实现了 Throwable 接口。所有预定义的 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(), "
"; } // 继续执行 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

相关文章