2015-07-18 2 views
4

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

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

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

+1

не должно быть проблемой. Но я бы рекомендовал расширить его с помощью вашего более интуитивного исключения. –

ответ

2

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

2

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

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

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

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

Если вы игнорируете "обычно ..." предложение, то это должно быть подходящим.

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

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