phpbar.de logo

Mailinglisten-Archive

[php] Exceptions selbst gebaut

[php] Exceptions selbst gebaut

Yannik Hampe yannikh at gmail.com
Mon Okt 23 13:47:27 CEST 2006



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