Должны ли исключения использоваться для проверки формы? - PullRequest
6 голосов
/ 02 апреля 2012

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

try {
    if (empty($_POST["name"])) {
        throw new UserRegistrationException("Your name cannot be empty.");
    }

    if (filter_var($_POST["email"])) {
        throw new UserRegistrationException("Invalid email");
    }

    // Save new user into database
} catch (UserRegistrationException $e) {
    // Show errors on screen
}

Также - если это на самом деле правильный способ сделать это, если пользователь отправляет оба пустое имя и недействительный адрес электронной почты, будут ли выполняться оба исключения или только то, которое появляется первым (имя в данном случае)?

Я использую PHP кстати.

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Мне лично нравится использовать исключения для всего, что должно остановить или изменить поток программы.Другими словами, если проверка определенного поля изменяет способ обработки данных или требует повторения процесса, я всегда использую исключение для обработки ошибок.

Если это тривиально, или я просто компилируюСписок сообщений об ошибках, то я не запускаю исключения.

Чтобы ответить на вопросы, два исключения не могут быть выданы одновременно.Первое полученное утверждение броска будет брошено.Это не значит, что иногда нет смысла перебрасывать как другой тип исключения.

4 голосов
/ 02 апреля 2012

Вариант использования для исключений предназначен для исключительных условий . В этом случае вы ожидаете, что поля имени пользователя и пароля будут пустыми? Если вы отображаете веб-форму, я бы сказал, что да, вы ожидаете пустых полей имени пользователя и пароля, поэтому вам следует явно проверять это условие, а не вызывать исключение.

Чтобы ответить на ваш конкретный вопрос, оба исключения не будут сгенерированы, если возникнет ошибка. Оператор throw отправит программу в блок catch. Оттуда контроль будет течь как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...