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
}
添加说明

用户贡献说明 6 个说明

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/>");
}
?>
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');
}
Jacob V. Rasmussen
9 年前
OutOfRangeException 用于超出范围的整数。
OutOfBoundsException 用于目标数组中未找到的键值。

编辑说明:这是不正确的;OutOfRangeException 与整数范围*没有任何*关系。 即使它是错误的,我决定保留这条高票评论,为了教育的目的。
匿名
2 年前
我可能重复 @jacub 的回答,但我认为区别如下

`OutOfBoundsException` 是您抛出的,当_您_设置边界并且不希望外部实体越过它们时,但它们可能越过。
示例:您要求输入一个介于 [1, 6] 之间的数字,而用户输入了 0 或 7 或其他。 您抛出一个异常,表示用户可以修改的错误。

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

在这两种情况下,关键词是“您抛出”。 这两种异常都是在运行时生成的,但后者描述了一种情况,如果系统配置正确,这种情况永远不会发生。
evguenia dot chagnon at gmail dot com
7 年前
class MyDynamicTastyPie implements ArrayAccess{
private $_pointeur = 0;
private $_array = ['草莓片','白巧克力','坚果'];

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('黑巧克力奶油装饰');
echo $myDynamicTastyPie[7];
}
catch(OutOfBoundsException $e){
echo '这是您的 OutOfBoundsException!';
}
匿名
9 年前
我想知道
OutOfRangeException 和 OutOfBoundsException 的区别 lol
To Top