2012-04-02 12 views
6

To może być pytanie n00b, ale cokolwiek. Czy można używać wyjątków do sprawdzania poprawności formularza? Załóżmy, że mam formularz, który prosi użytkowników o podanie imienia i nazwiska oraz adresu e-mail. Czy można wykonać następujące czynności?Czy w przypadku zatwierdzania formularza należy stosować wyjątki?

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 
} 

także -jeżeli jest to w rzeczywistości jest poprawny sposób zrobić to- gdy użytkownik podnosi zarówno pustą nazwę i nieprawidłowy e-mail, by zarówno z wyjątków lub wykonać tylko jeden, który pojawia się pierwszy (imię w tym przypadku)?

Używam przy okazji PHP.

+0

Jest to z pewnością dziwny sposób używania wyjątków. "czy oba wyjątki zostaną wykonane, czy tylko ten, który pojawi się pierwszy" - czy trudno jest napisać 5 linii kodu i zobaczyć siebie? – zerkms

+0

Tylko pierwszy zostałby rzucony i złapany, inni pomijani. Jeśli chcesz zebrać komunikaty o błędach, lepiej jest po prostu użyć zwykłego starego łańcucha if/else i dołączyć wiadomości do tablicy. –

+0

@Michael Myślałem, że tak ... Wydawało się, że jest to dobry moment na używanie wyjątków (jako że nieprawidłowy sygnał wejściowy powinien być uważany za _wyjątkowy_), ale pozostanę przy kodzie – federicot

Odpowiedz

4

Ja osobiście lubię używać wyjątków dla wszystkiego, co powinno zatrzymać lub zmienić przebieg programu. Innymi słowy, jeśli walidacja określonego pola zmienia sposób przetwarzania danych lub wymaga powtórzenia procesu, zawsze używam wyjątku do obsługi błędów.

Jeśli to trywialne, lub po prostu kompiluję listę komunikatów o błędach, to nie wyzwalam wyjątków.

Aby odpowiedzieć na pytania, nie można podać dwóch wyjątków w tym samym czasie. Osiągnięta zostanie pierwsza instrukcja rzutowania. To nie znaczy, że czasami nie ma sensu ponownie obstawać jako kolejny rodzaj wyjątku.

+0

Domyślam się, że jest to, jak mówisz, banalny przypadek (a także kompiluję listę komunikatów o błędach), więc wyjątki nie pasowałyby w tym przypadku. – federicot

+0

Można również rozszerzyć klasę wyjątków, aby dołączyć stos skonstruowanych wyjątków, a następnie wygenerować zagregowany wyjątek (którego można użyć do skompilowania listy komunikatów o błędach, przepuścić do znajdź konkretną ciekawostkę, itp.) – landons

+0

Możesz też zbudować zbiór błędów sprawdzania poprawności w staroświecki sposób (np. dołączając do tablicy), a następnie wyrzuć jeden wyjątek sprawdzania poprawności zawierający wszystkie te błędy. –

4

Przypadek użycia wyjątków dotyczy wyjątkowych warunków. W takim przypadku czy spodziewasz się, że pola nazwy użytkownika i hasła będą puste? Jeśli wyświetlasz formularz internetowy, twierdzę, że tak, oczekujesz pustych pól nazwy użytkownika i hasła, a więc powinieneś wyraźnie sprawdzać ten warunek, zamiast rzucać wyjątek.

Aby odpowiedzieć na konkretne pytanie, oba wyjątki nie będą zgłaszane w przypadku napotkania błędu. Instrukcja throw wyśle ​​program do bloku catch. Stamtąd kontrola będzie przebiegać normalnie.

+5

Zgodnie z definicją każdy wyjątek jest nieoczekiwany. Jak na świecie wiesz, jak sobie z tym poradzić? Twierdzę, że wyjątki są stosowane w przypadkach, w których pierwotne wykonanie nie powinno być kontynuowane. – landons

+0

Nie wspominając, że można by po prostu dodać błędy sprawdzania poprawności do tablicy, a następnie rozbić ją na ciąg znaków, który jest następnie zgłaszany jako wyjątek. – Alex

Powiązane problemy