OutOfRangeException 类

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

介绍

当请求了非法索引时抛出的异常。这表示应该在编译时检测到的错误。

类概要

class OutOfRangeException extends LogicException {
/* 继承的属性 */
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
}
添加说明

用户贡献说明 4 条说明

Jakub
7 年前
我这样理解
按照定义,OutOfRangeException 应该用于潜在问题是逻辑性的情况 - 由于错误的代码或定义而发生。OutOfBoundsException 用于运行时。

示例(另请参阅“OutOfBoundsException 类”文章中的说明)
<?php
function prepareData(PDOStatement $s) {
$x = $s->fetch();
if (!isset(
$x['secretColumn']))
throw new
OutOfRangeException ("Secret column doesn't exist! Verify table definition and query.");
}
Free
4 年前
我尝试编写一个将在编译时检测到的代码片段,但无法实现,显然是因为我的 PHP 引擎的解释性质。创建者应该提供一个使用示例(供最终用户使用)或指向 PHP 源代码以获取使用示例。到目前为止,提供的示例都不反映在编译时检测到的异常,如该类所断言。

IMO,期望编译器在动态类型、通常为 JIT 执行的环境中检测到非法索引,充其量是抱有希望。什么时候会有一个关于哪些索引应被视为“在范围内”的严格约定?编译器如何知道这个约定?此外,我们如何在编译阶段尝试/捕获它?

SPL 还提供了 OutOfBounds 异常。如果此类、其父类和 OOB 区别不大,那么 SPL 是否需要这 3 个?
evguenia dot chagnon at gmail dot com
7 年前
示例

$calendar = new Calendar();
$calendar->getMonth(15);
anrdaemon at yandex dot ru
2 年前
我可能想重复 @jacub 的回答,但我认为区别在于以下方面

`OutOfBoundsException` 您抛出它,当 _您_ _设置_ 范围,并且不希望外部实体越过它们,但它们可能是这样做的。
示例:您要求一个范围在 [1, 6] 之内的数字,用户输入 0 或 7 或其他值。您抛出一个异常,表明用户可以修改的错误。

`OutOfRange` 您抛出它,当您期望值在允许的范围内,但实际操作失败。
示例:您正在尝试使用 API 本身提供的 information 访问外部 API 调用,它突然告诉您参考键没有指向有效的对象。您抛出一个异常,表明用户无法修正的内部错误。

在这两种情况下,关键词都是“您抛出”。这两种异常都是在运行时生成的,但后者描述了一种不应该发生的状况,如果系统配置正确,则永远不会发生。
To Top