Mailinglisten-Archive |
Hannes H. wrote: > Hallo, liebe Liste :-) > > Nennt mich Wahnsinnig, aber ich möchte beim Rewrite meines Projektes > das Errorhandling (vorallem das eigener Klassen) komplett auf > Exceptions aufhängen. Hat schon mal jemand gute Erfahrungen mit selbst > gebauten Exceptions gemacht? Stimmt, du bist wahnsinnig. Nicht, weil du exceptions benutzen willst (das ist eine verdammt gute Idee), sondern weil du eine bestehendes funktioniereendes Projekt darauf umstellen willst :-). Also eine gute Idee ist das in jedem Fall, aber auch viel Arbeit *gg*. > > Meine eigentliche Frage ist allerdings: Wenn ich in einer Klasse > MyClass die Methode fooBar() implemientiere, und in dieser Methode > eine Exception mit throw werfe. Kann ich diese Außerhalb dann > Abfangen? Eigentlich ja, oder? Sonst hätten Exceptions meiner Meinung > nach null Sinn. Als kleines Beispiel: > > <?php > > $blubb = new MyClass(); > try > { > $blubb->fooBar(); > } > catch(MyOwnException e) > { > /* */ > } > ?> > > Funktioniert das so? Ja, der Code funktioniert so. Generell gilt, die Exception "bubbled" nach oben, bis sie abgefangen wird, oder nicht mehr weiter nach oben bubblen kann. Also Beispiel: function a() { ... throw new MyOwnException("Für diese Woche ist Schluss"); } function b() { a(); } try { b(); } catch(MyOwnException e) { //sich damit rumschlagen } Das funktioniert. Dabei ist es egal, ob a() und b() noch 100 mal weiterverschachtelt sind oder in irgendwelchen Klassen sind und sonstwas. Die exception geht solange zurück, bis sie abgefangen wird. Schön, wie alle auf deine Mail mit was anderem geantwortet haben *gg*. Zu dem "wo ist das denn jetzt sinnvoll" mal meine Meinung: Grundsätzlich ist eine Exception etwas was nicht passieren sollte. Zum Beispiel bei einer FileNotFoundException. Man geht davon aus, dass die Datei da ist und wenn sie nicht da ist, dann ist etwas schief gelaufen und das prog soll dem User dies mitteilen und aufhören. In einer anderen Situation, wo die Datei erst angelegt werden soll, wenn sie nicht existiert, sollte man keine Exception schmeissen, sondern mit file_exists auf die Datei prüfen und ggf. die Datei anlegen. Insofern macht es keinen Sinn eine exception direkt nach dem Auftretetn um jeden Preis so schnell zu behandeln wie möglich. Im Gegenteil. Man darf sie ruhig gaaanz weit hochbubbeln lassen. Und wenn man die exception sofort abfangen muss, hat man schon vorher was falsch gemacht ;-). Nicht umsonst speichert man in der exception auch immer einen Fehlertext. Nicht, weil das programm intern sich damit rumschlagen soll. > > Hannes Halenka Yannik
php::bar PHP Wiki - Listenarchive