Exception Handling

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Exception Handling

    Ich grüble gerade über Exception Handling und bin an zwei Möglichkeiten hängen geblieben.
    Erstere ist die wohl gängigste, wann man das so sagen kann: Es wird eine "allgemeine" Exception mit spezifischer Fehlermeldung geworden.
    Z.B.:
    PHP-Code:
    class Header
    {
        public function 
    send()
        {
            if (
    headers_sent($file$line))
            {
                throw new 
    header::Exception('Headers already sent in ' $file ':' $line);
            }
        }

    Nun bin ich auch auf eine Variante gestoßen, bei der für jeweils einen Fehler eine spezifische Exception kreiert wird:
    PHP-Code:
    class Header
    {
        public function 
    send()
        {
            if (
    headers_sent($file$line))
            {
                throw new 
    header::exceptions::HeadersAlreadySent($file ':' $line);
            }
        }

    Ich habe die Implementierung der Exception-Klasse nicht gesehen, aber ich gehe mal davon aus, dass sie __toString() überschreibt, die Fehlermeldung damit also dort enthalten ist.

    Meine Frage an euch ist nun, ob letztere Variante Vorteile birgt oder weniger ratsam ist. Ein Vorteil, der mir spontan einfällt, ist, dass die Fehlermeldung nicht mehr fest mit der Klasse, in der die Exception geworfen wird, verankert ist. Man kann sie also modifizieren, in dem man lediglich entsprechende Änderungen an der Exception-Klasse vornimmt.

    Grüße
    Nieder mit der Camel Case-Konvention

  • #2
    Zweitere ist eleganter, da du ganz einfach verschiedene Exceptions verschieden behandeln kannst.

    Kommentar


    • #3
      Gut, das ist schonmal etwas. Ich frage mich allerdings noch, ob die Fehlermeldungen dabei tatsächlich in der __toString() Methode definiert werden. Das ist jetzt nämlich lediglich meine Schlussfolgerung gewesen.

      Grüße
      Nieder mit der Camel Case-Konvention

      Kommentar


      • #4
        Gut, das ist schonmal etwas. Ich frage mich allerdings noch, ob die Fehlermeldungen dabei tatsächlich in der __toString() Methode definiert werden. Das ist jetzt nämlich lediglich meine Schlussfolgerung gewesen.
        PHP-Code:
        class MyException extends Exception{}
        $ex = new MyException('foo');
        echo 
        $ex
        Code:
        exception 'MyException' with message 'foo' in Command line code:1
        Stack trace:
        #0 {main}
        Ist also noch mehr als nur die Nachricht.

        Kommentar

        Lädt...
        X