использование OutOfBoundsException для не массивов

Скажем, у меня есть метод, который принимает значения от 0 до x. Если параметр больше x или меньше нуля, я хочу создать исключение. Является ли OutOfBoundsException разумным исключением?

http://php.net/manual/en/class.runtimeexception.php говорит, что это «исключение, если значение не является допустимым ключом». Поскольку я не использую это исключение с массивами (и впредь с ключами), все ли в порядке, если я его использую?

Я имею в виду, с одной стороны, кажется, что это не имеет большого значения. Например, если бы я выдал исключение BadMethodCallException, а человек, использующий метод, знал бы об этом и ловил бы либо это, либо Exception, кажется, этого было бы достаточно, но было бы неплохо иметь исключения, которые тоже имеют смысл.


person neubert    schedule 18.07.2015    source источник
comment
не должно быть проблемой. Но я бы порекомендовал расширить его с помощью вашего собственного, более интуитивно понятного Exception.   -  person pinkal vansia    schedule 18.07.2015


Ответы (2)


Это должно быть хорошо и уместно для чего-то подобного. Исключения обычно не тесно связаны с их первоначальным использованием. Это «за пределами», как вне диапазона допустимых значений, так что это имеет смысл.

person Will    schedule 18.07.2015

Из предопределенных исключений SPL я бы предпочел InvalidArgumentException. Однако в его документации говорится:

Возникает исключение, если аргумент не имеет ожидаемого типа.

И тип аргумента не проблема в вашем случае. Другой вариант UnexpectedValueException

Исключение возникает, если значение не совпадает с набором значений. Обычно это происходит, когда функция вызывает другую функцию и ожидает, что возвращаемое значение будет иметь определенный тип или значение, не включая арифметические ошибки или ошибки, связанные с буфером.

Если вы проигнорируете предложение "обычно...", это должно подойти.

Я имею в виду, с одной стороны, кажется, что это не имеет большого значения. Например, если бы я выдал исключение BadMethodCallException, а человек, использующий метод, знал бы об этом и ловил бы его либо для этого, либо для Exception, кажется, этого было бы достаточно, но было бы неплохо иметь исключения, которые тоже имеют смысл.

Я полностью согласен с этим. И поскольку предопределенные исключения не эти четко задокументированы, я бы предпочел реализовать свое собственное. Вы все еще можете расширить RuntimeException из SPL.

person Fabian Schmengler    schedule 18.07.2015