Подтвердить что ты не робот

Когда вы выбросите DomainException в PHP?

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

4b9b3361

Ответ 1

Там довольно веселая дискуссия о том, как никто, кажется, не знает, что значит:

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

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

Домен означает домен данных здесь. То есть a DomainException должны быть выброшены когда значение не соответствует определенную действительную область данных. Примеры:

  • 0 не входит в область для деления.
  • Foo не входит в домен для будних дней.

Первое отличается от и так, но вы можете использовать InvalidParameter в случае, если фактически параметр функции который выполняет разделение. Если это значение, вычисленное внутри функции до выполнения подразделения и затем выполняется предварительная проверка вместо выполнения разделения, то он становится DomainException.

Ответ 2

Описание RangeException является более полезным:

Исключение выбрано для указания ошибок диапазона во время выполнения программы. Обычно это означает, что была арифметическая ошибка, отличная от/переполнения. Это версия времени выполнения DomainException.

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

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


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

Ответ 3

Этот вид исключения должен использоваться для информирования о ошибках домена в математическом смысле.

См. домен функции.

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