You are not logged in.

  • Login

Audience

Unregistered

1

Friday, March 25th 2011, 2:59pm

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?

2

Saturday, March 26th 2011, 1:31pm

Hi,
wir hatten mal einen ähnlichen Thread dazu: Wo Exceptions "fangen"?
Ich habe damals auf die Best Practices des Zend Frameworks verwiesen: http://framework.zend.com/wiki/display/Z…onbestpractices

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

3

Saturday, March 26th 2011, 4:39pm

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.

4

Saturday, March 26th 2011, 4:50pm

Ja, natürlich müsste ich die Exception erst im Controller fangen, bis ich mit der nächsten Exception weiter machen kann.
Da habe ich mich schlecht ausgedrückt.

Audience

Unregistered

5

Monday, March 28th 2011, 11:34am

@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?

6

Monday, March 28th 2011, 3:16pm

@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.

PHP Quellcode

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

Similar threads

Social bookmarks