Вопрос по exception, php – Когда бы вы бросили DomainException в PHP?

19

Я просматривал список предопределенных исключений в PHP и заметил, чтоDomainException, Кто-нибудь знает, что означает DomainException? Означает ли это неудачная проверка модели данных?

Ваш Ответ

3   ответа
3

mathematical sense.

Увидетьобласть функции.

Например, функция квадратного корня будет определена только для положительных чисел (если только вы не используете комплексные числа ...)

21

что никто, кажется, не знает, что означает:

http://bugs.php.net/bug.php?id=47097

С конца этой ссылки:

Domain means data domain here. That is a DomainException shall be thrown whenever a value does not adhere to a defined valid data domain. Examples:

0 is not in the domain for division. Foo is not in the domain for weekdays.

The first is different from out of range and alike, but you could use InvalidParameter in case it is actually a parameter to the function that performs the division. If it is a value calculated inside the function prior to executing the division and then a pre-conditon check throws instead of executing the division, then it becomes a DomainException.

Мне нравится бросать это вdefault Путь случая коммутатора, который не имеет значений по умолчанию. Скажем, у меня есть фабрика "кусочков" для настольной игры, и я могу создать либо «императорский кусок» или «посол»; или «кусок пешки». В заводском классе у меня есть->create( $typeAsString ) метод. Затем у меня есть переключатель для «emperor», «ambident», «pawn» и по умолчанию. По умолчанию я выбрасываю исключение DomainException.
хаха это довольно забавно +1 oscarkuo
5

RangeException немного более полезно:

Exception thrown to indicate range errors during program execution. Normally this means there was an arithmetic error other than under/overflow. This is the runtime version of DomainException.

Я думаю, что это применимо и к не арифметике, например, видеть этопользовательский комментарий.

Например, если вы ожидаете, что значение будет в наборе{'jpeg', 'png', 'gif', 'bmp'} и вы получите что-то еще, как'foo'это хороший кандидат наDomainException (логика) /RangeException (Среда). Я уверен, что вы могли бы подумать о многих других случаях использования.


Кроме того, я только что нашел эту полезную статью, которая дает более подробные объяснения, чем php.net: Как использовать встроенные классы исключений SPL для лучшей обработки ошибок

Я используюInvalidArgumentException Вот.
@Kamafeatherbut just edge-cases to care of. Это похоже на то, что мне нужно исправить (проверка) & # x2026;
Ммм ... Тогда я, наверное, не могу обернуть голову, в чем разница междуLogicException а такжеRuntimeException, Документация по PHP довольно короткая / тонкая / неясная для меня; если этотLogicException, как вы говорите, когда следует использоватьRuntimeExceptionкакRangeException?
Попытка перефразировать: если'foo' является недопустимым значением (которое, например, исходит извне, и мы не можем его контролировать), которое создается и предоставляется вruntimeСкажетеLogicException должен быть использован; чтоRuntimeExceptionтогда?
@MartinBean Я бы не стал:InvalidArgumentException продолжаетсяLogicException. LogicException should lead directly to a fix in your code; это не тот случай, так как'foo' является допустимым типом ввода (строка); это приемлемо с точки зрения кода, но не приемлемо с точки зрения домена, потому что оно не включено в набор значений, определенных нашими правилами домена (our images can be just: jpeg, png, gif, bmp) и ничего не значит для нас. В коде нет ошибок, которые нужно исправить, но есть только крайние случаи, о которых нужно заботиться.

Похожие вопросы