PHP抛出异常

介绍

Throwable接口由Error和Exception类实现。所有预定义的错误类均继承自错误类。相应的Error类的实例被抛出在try块中,并在适当的catch块中进行处理。

投掷错误

在顺序定义的最后一个catch块之后,正常执行(当try块内没有引发异常时)将继续。

示例

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

输出结果

显示以下输出

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(). "\n";
}
?>

输出结果

显示以下输出

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(). "\n";
}
?>

输出结果

显示以下输出

key not found