PHP Conference Japan 2024

OutOfBoundsException 类

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

简介

如果某个值不是有效的键,则抛出此异常。这表示在编译时无法检测到的错误。

类概要

class OutOfBoundsException extends RuntimeException {
/* 继承的属性 */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* 继承的方法 */
public Exception::__construct(string $message = "", int $code = 0, ?Throwable $previous = null)
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
}
添加注释

用户贡献的注释 5 条注释

3
sricharan dot krishnan at gmail dot com
8 年前
可能发生 OutOfBoundsException 的示例
假设在某个除法过程之后,我们希望访问数组中的某个值[当然,前提是除法的结果值在数组的大小范围内]..

try{
if ($iNum2 == 0){
throw new Exception("除以零");
}
$iResult = $iNum1 / $iNum2;
echo ("除法结果是:".($iResult)."<br/>");
}
catch (Exception $e){
echo ("不能除以零。".($e)."<br/>");
}

$rg_Array = array(1,2,3,4);

try{
if ($iResult > sizeof($rg_Array)- 1){
throw new Exception("超出键值");
}
echo ("捕获除法过程后 \$rg_Array 中的值:".($rg_Array[$iResult])."<br/>");
}
catch (Exception $e){
echo ("除法结果的值超出了数组的范围。".($e)."<br/>");
}
?>
3
Jakub Adamczyk
7 年前
我这样理解
根据定义,当潜在问题是逻辑问题时,应该使用 OutOfRangeException。这个(OutOfBoundsException)是针对运行时的,因此它非常适合捕获由于数据库错误和类似情况而发生的错误。

使用 OutOfBoundSException 的示例(另请参阅“OutOfRangeException 类”文章中的注释)

<?php
class HandleApplication {
public function
__construct($_POST) {
if(!isset(
$_POST['secretCode'])
throw new
OutOfBoundsException('Application hasn't sent secret code for authenticate');
}
3
Jacob V. Rasmussen
9 年前
OutOfRangeException 用于超出范围的整数。
OutOfBoundsException 用于目标数组中找不到的键值。

编辑注:这是错误的;OutOfRangeException 与整数范围*没有任何*关系。我决定保留这条得票数很高的评论,即使它是错误的,也是为了教育的目的。
0
匿名
2 年前
我可能会重复 @jacub 的答案,但我认为区别在于

`OutOfBoundsException` 你抛出,当你_设置_边界并且不希望外部实体越过它们,但它们可能会越过。
例如:你要求一个 [1, 6] 范围内的数字,用户输入 0 或 7 或其他什么。你抛出一个异常来指示用户错误,他们可以修改。

`OutOfRangeException` 你抛出,当你期望值在允许的边界内,但实际操作失败时。
例如:你正在尝试使用 API 本身提供的信息访问外部 API 调用,并且它突然告诉你引用键没有指向有效的对象。你抛出一个异常来指示用户无法更正的内部故障。

在这两种情况下,关键词都是“你抛出”。这两个异常都是在运行时生成的,但后者描述了一种不应该发生的情况,如果系统配置正确,这种情况永远不会发生。
-1
evguenia dot chagnon at gmail dot com
7 年前
class MyDynamicTastyPie implements ArrayAccess{
private $_pointeur = 0;
private $_array = ['strawberry slice','white chocolate','nuts'];

public function offsetExists($key){
return isset($this->_array[$key]);
}

public function offsetGet($key){
if ($key > count($this->_array)){
throw new OutOfBoundsException('您的美味派没有那么多块');
}
return $this->_array[$key];
}

public function offsetSet($key, $value){
$this->_array[$key] =$value;
}

public function offsetUnset($key){
unset($this->_array[$key]);
}

public function addSlice($slice){
$this->_array[] = $slice;
}
}

try {
$myDynamicTastyPie = new MyDynamicTastyPie();
$myDynamicTastyPie->addSlice('Black chocolate cream decoration');
echo $myDynamicTastyPie[7];
}
catch(OutOfBoundsException $e){
echo '这是您的OutOfBoundsException!';
}
To Top