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

