2012-04-02 12 views
6

Das könnte eine Frage von N00bish sein, aber was auch immer. Ist es in Ordnung, Ausnahmen für die Formularüberprüfung zu verwenden? Angenommen, ich habe ein Formular, in dem Benutzer nach ihrem Namen und ihrer E-Mail gefragt werden. Ist es richtig, Folgendes zu tun?Sollen Ausnahmen für die Formularvalidierung verwendet werden?

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 
} 

auch -wenn dies in der Tat ist der richtige Weg it- zu tun, wenn der Benutzer beide einen leeren Namen und eine ungültige E-Mail einreicht, würde sowohl die Ausnahmen ausführen oder nur die, die zum ersten Mal erscheint (der Name in diesem Fall)?

Ich verwende übrigens PHP.

+0

Es ist definitiv eine seltsame Art, Ausnahmen zu verwenden. "Würden beide Ausnahmen ausgeführt werden oder nur die, die zuerst angezeigt wird" - ist es so schwierig, 5 Zeilen Code zu schreiben und sich selbst zu sehen? – zerkms

+0

Nur die erste würde geworfen und gefangen werden, andere werden übersprungen. Wenn Sie Fehlermeldungen sammeln müssen, verwenden Sie einfach eine einfache alte if/else-Kette und hängen Nachrichten an ein Array an. –

+0

@Michael Ich dachte schon ... Es schien eine gute Gelegenheit zu sein, Ausnahmen zu verwenden (da ungültige Eingaben als _exceptional_ betrachtet werden sollten), aber ich bleibe bei der if/else – federicot

Antwort

4

Ich persönlich gerne Ausnahmen für alles, die Programmablauf stoppen oder ändern sollte. Mit anderen Worten, wenn die Validierung eines bestimmten Feldes ändert, wie Daten verarbeitet werden, oder erfordert, dass der Prozess wiederholt wird, dann verwende ich immer eine Ausnahme für die Fehlerbehandlung.

Wenn es trivial ist oder ich einfach eine Liste von Fehlermeldungen kompiliere, trigger ich keine Ausnahmen.

Um Fragen zu beantworten, können zwei Ausnahmen nicht gleichzeitig ausgelöst werden. Die erste throw-Anweisung, die erreicht wird, wird ausgelöst. Das heißt nicht, dass es manchmal keinen Sinn macht, als eine andere Art von Ausnahme zu rekurrieren.

+0

Ich denke, das ist, wie Sie sagen, ein trivialer Fall (und ich kompiliere auch eine Liste) von Fehlernachrichten), so dass Ausnahmen in diesem Fall nicht passen würden – federicot

+0

Sie könnten auch die Exception-Klasse erweitern, um einen Stapel von konstruierten Ausnahmen anzufügen, und dann eine aggregierte Exception werfen (die Sie verwenden könnten, um eine Liste von Fehlermeldungen zu kompilieren) Finden Sie eine bestimmte von Interesse, etc.) – landons

+0

Oder Sie könnten eine Sammlung von Validierungsfehlern auf die altmodische Art und Weise erstellen (zB an ein Array anhängen) und dann eine einzelne Validierungsausnahme werfen, die all diese Fehler enthält. –

4

Der Anwendungsfall für Ausnahmen ist für außergewöhnliche Bedingungen. Erwarten Sie in diesem Fall, dass die Felder Benutzername und Passwort leer sind? Wenn Sie ein Webformular anzeigen, würde ich argumentieren, dass Sie tatsächlich leere Felder für Benutzername und Kennwort erwarten. Daher sollten Sie diese Bedingung explizit prüfen, anstatt eine Ausnahme auszulösen.

Um Ihre spezifische Frage zu beantworten, werden beide Ausnahmen nicht ausgelöst, wenn ein Fehler auftritt. Die throw-Anweisung sendet das Programm in den catch-Block. Von dort wird die Kontrolle normal fließen.

+5

Nach Ihrer Definition ist jede Ausnahme unerwartet. Wie um alles in der Welt würdest du dann damit umgehen? Ich würde argumentieren, dass Ausnahmen für Fälle verwendet werden, in denen die primäre Ausführung nicht fortgesetzt werden sollte. – landons

+0

Ganz zu schweigen davon, dass man die Validierungsfehler einfach zu einem Array hinzufügen und dann zu einem String explodieren lassen könnte, der dann als Ausnahme ausgelöst wird. – Alex

Verwandte Themen