Exception und Error-Handling bei Klassen

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Exception und Error-Handling bei Klassen

    Hallo,

    ich habe mir letztens Gedanken über die Unterschiede zwischen Fehler (als Rückgabewert einer Funktion/Klasse) und Exceptions (PHP5) gemacht und wollte einmal eure Meinung dazu hören. Generell würde ich folgende Unterschiede sehen:
    Exceptions
    - Sollten nur für Ausnahmefehler verwendet werden, die den weiteren (geplanten) Programmablauf unmöglich machen
    - Können nur Informationen über das Fehlschlagen einer Aktion liefern

    Fehler
    - Sollten für erwartete Situationen benutzt werden, insbesondere bei der Interaktion mit Benutzereingaben
    - Beeinflussen den Programmablauf nicht und sind daher für unkritische Fälle geeignet

    Angenommen, eine Klasse soll ein Formular auswerten und die fehlerhaften Felder zurückgeben. Ein Fehlermanagement könnte nun so aussehen, dass die Klassenfunktionen im Erfolgsfall TRUE zurückgeben, ansonsten eine Fehlerklasse, die Informationen über die Fehlerquelle und -art enthält. Theoretisch könnte man auch auf Exceptions zurückgreifen und nach Prüfung aller Felder einen Exception werfen, aber meiner Meinung nach stört das den Programmfluß, insbesondere weil Fehleingaben erwartete Situationen sind. Natürlich ist die Definition für "erwartete Situation" Anssichtssache. Wie handhabt ihr sowas in der Praxis?
  • Hi,
    wir hatten mal einen ähnlichen Thread dazu: Wo Exceptions "fangen"?
    Ich habe damals auf die Best Practices des Zend Frameworks verwiesen: framework.zend.com/wiki/displa…29-Exceptionbestpractices

    Also ich arbeite gerne mit Exceptions, gerade wenn das System sehr verschachtelt ist. Das betrifft auch Formulare.
    Die Datenvalidierung geschieht hierbei im Model, dort werfe ich dann eine Exception, die ich erst im Formular Controller fange und entsprechend darstelle.
    Mit dem Konzept kann ich natürlich auch mehrere Exceptions werfen, im Formular Controller sammeln und dann gebündelt darstellen.

    Das ganze lässt sich natürlich auch mit vielen -1 Rückgabewerten realisieren. Aber ich persönlich finde Exceptions hier angenehmer.

    Lg
  • Torben Brodt wrote:

    Mit dem Konzept kann ich natürlich auch mehrere Exceptions werfen, im Formular Controller sammeln und dann gebündelt darstellen.

    Kenn mich mit PHP Exceptions nicht so hundertprozentig aus, aber wie wirft man denn mehrere Exceptions gleichzeitig? Sobald die erste geworfen wurde geht er doch solange in der callhistorie zurück bis er nen passenden catch-block findet. In deinem Beispiel ist er da doch schon längst aus dem Model "drausen" und im Controller.
  • @Torben: Okay, du schnappst dir die Fehler im Controller, aber bei mehreren Fehlern ist das doch eine Pest? Wenn du einmal aus einem try-Block fliegst, kommst du ja nicht mehr hinein. Also wie löst du das? Viele hintereinander geschaltete try-catch-Anweisungen?
  • Audience wrote:

    @Torben: Okay, du schnappst dir die Fehler im Controller, aber bei mehreren Fehlern ist das doch eine Pest? Wenn du einmal aus einem try-Block fliegst, kommst du ja nicht mehr hinein. Also wie löst du das? Viele hintereinander geschaltete try-catch-Anweisungen?


    Ich löse das so, das ich im Catchblock die Anwendung wieder neu starte.

    Source Code

    1. try {
    2. $app = new Application();
    3. $app->run();
    4. } catch(Anemo\Runtime\Exception $e) {
    5. $app->getFrontcontroller()->getResponse()->setException($e);
    6. $app->run($app->getFrontcontroller()->initErrorHandling()->dispatch());
    7. }