Класс OutOfRangeException
(PHP 5 >= 5.1.0, PHP 7)
Введение
Создается исключение при запросе несуществующего индекса. Такие ошибки будут обнаружены во время компиляции.
Обзор классов
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Класс BadFunctionCallException
- Класс BadMethodCallException
- Класс DomainException
- The InvalidArgumentException class
- Класс LengthException
- Класс LogicException
- Класс OutOfBoundsException
- Класс OutOfRangeException
- Класс OverflowException
- Класс RangeException
- Класс RuntimeException
- Класс UnderflowException
- Класс UnexpectedValueException
Коментарии
Exemple :
$calendar = new Calendar();
$calendar->getMonth(15);
I see this in this way:
By definiton, OutOfRangeException should be use to when potential problem is logical - occurs because of wrong code or definition. OutOfBoundsException is for runtime.
Example (see also note in "OutOfBoundsException class" article):
<?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.");
}
I tried to write a snippet that would be detected at compile time, but was unable, apparently due to my PHP engine's interpreted nature. The creator(s) should have provided a usage example (for end-users) or pointed to PHP sources for an example of where/how it's used. None of the provided examples, to date, reflect an exception detected at compile time, as this class asserts.
IMO it's hopeful at best to expect a compiler to detect an illegal index in a dynamically-typed, typically JIT-executed, enviro. Since when is there a strict contract of what indexes should be considered "within range" and how would the compiler know about this contract? Also, how would we try/catch that in the compile phase?
SPL also provides the OutOfBounds exception. If this class, its parent, and OOB have little distinction, then does SPL need all 3?