Exception Handling

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

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

    Comment


    • #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

      Comment


      • #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.

        Comment

        Working...
        X