Wie am besten mit Fehlern umgehen?

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

  • Wie am besten mit Fehlern umgehen?

    Ich arbeite gerade an einer Klasse, welche einige Funktionen bereitstellen soll um gewisse Aufgaben zu erfüllen bzw zu erleichtern.
    Das ganze wird wahrscheinlich in richtung Framework gehen.

    Aber eines ist mir noch nicht ganz klar.
    Wie soll ich mit fehlern umgehen?

    Freie Benutzereingaben bedeuten immer, dass einer aus unwissenheit oder langweilige was falsches eingibt. Wenn ich z.B. zwei Integer brauche und jemand zwei Strings eingibt, dann wird es wohl nix geben.

    Gemäß der Einstellung "alle fremden Daten sind grundsätzlich böse" möchte ich natürlich soweit es geht alles abfangen.

    Vielleicht kann mir da jemand etwas weiterhelfen
    [list=1][*]Wie soll ich am besten die Parameter überprüfen? In jeder Methode? z.B. if(is_numeric($Wert1)) oder gibts da was feineres?[*]Wie sollte man am besten vorgehen wenn Fehler auftauchen? direkt in der jeweiligen Methode prüfen und mit die() ausgeben?[*]Direkt ausgeben aber mit was "besserem" als die()?[*]Oder sollen die Fehlermeldung zurück zur aufrufenden Datei geleitet werden und dort abgefangen werden?[/list=1]

    ich hab mir mal ein paar Klassen aus dem PEAR angesehen (hauptsächlich MDB2) aber da hab ich dann mal garnix durchblicken können

  • #2
    zu 2) Ich würde zum Error Handling eigene Methoden schreiben. Dann kannst du immer noch via Parameter bestimmen ob die Fkt im Fehlerfalle abbrechen, loggen oder was auch immer soll

    zu 1) eine eigene Methode, die das Validieren von Daten übernimmt würde ich vorziehen. Hätte wiederum den Vortei, dass du via Parameter steuern kannst worauf die Fkt prüfen soll (Integer, Float etc ppt)

    3) kommt imho darauf an wie schwerwiegend der Fehler für die weitere Abarbeitung des Codes ist. Normalerweise hast du ja den Type Cast, der z.B. aus '0' 0 macht wenn ein Integer gefordert ist. Also ist es egal ob String oder Int
    Nur wenn du mit der Zahl noch Berechnungen (z.B. Divisionen) machen willst, dann musst du den Code bei 0 oder '0' abbrechen, sonst macht das bei einer Division durch 0 der Parser mit einer hässlichen Meldung selber.
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      du kennst nicht zufällig ein projekt, klasse oder codeschnippsel, wo soetwas schön gelöst wurde?
      würde mir gern ein bisschen was abschauen.

      meine idee ist nämlich etwas umfangreicher und es wäre ärgerlich wenn ich gegen ende feststelle, dass meine fehlerbehandlungen nicht optimal sind

      Kommentar


      • #4
        Ich würde die Exceptions von PHP um deine Methoden erweitern
        Ist sicherlich ne gute Ausgangsbasis. Was fertiges kenne ich nicht, da es doch stark vom Code abhängt, welche Fehler überhaupt auftreten können

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Mal so eine andere Sache, die irgendwie immer unter den Tisch gekehrt wird: Fehlermeldungen sollten auf Produktivsystemen nicht ausgegeben werden.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Ist sicherlich ne gute Ausgangsbasis. Was fertiges kenne ich nicht, da es doch stark vom Code abhängt, welche Fehler überhaupt auftreten können
            [/B]
            naja aber es gibt doch sicherlich andere leute die auch schon mit php klassen etc entwickelt haben die fehlerbehandlungen eingebaut haben.
            ich will ja nur inspiration und nicht 1:1 kopieren. ich steh da irgendwie ein wenig auf dem Schlauch wie ich es am besten angehen sollte.

            Kommentar


            • #7
              wenn es dir um das abfangen ungültiger benutzereingaben geht, wird ja wohl ein formular daran beteiligt sein. dazu gibt es bereits fertige validierungsklassen (auch für die erzeugung).

              z.b.: http://pear.php.net/package/HTML_QuickForm2

              Kommentar


              • #8
                Original geschrieben von unset
                Mal so eine andere Sache, die irgendwie immer unter den Tisch gekehrt wird: Fehlermeldungen sollten auf Produktivsystemen nicht ausgegeben werden.
                Aha ... deshalb wohl solche Fehlermeldungen:
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  Re: Wie am besten mit Fehlern umgehen?

                  1. Wie soll ich am besten die Parameter überprüfen? In jeder Methode? z.B. if(is_numeric($Wert1)) oder gibts da was feineres?
                  Diese Validierungs- bzw. Cast-Methoden kannst du dir auch zum Beispiel statisch in einer Klasse ablegen, so schreibst du nicht andauernd überall die gleichen Abfragen hin.
                  Am elegantesten finde ich es, den Methoden wenige Parameter übergeben zu müssen sondern diese vorher Klasseneigenschaften zuzuweisen und durch getter/setter zu typisieren.
                  2. Wie sollte man am besten vorgehen wenn Fehler auftauchen? direkt in der jeweiligen Methode prüfen und mit die() ausgeben?
                  die() ist schon mal sehr ungeschickt, da nicht jede Pups-Methode dein Skript abschießen soll. Außerdem ist das Reagieren auf Fehler doch recht dürftig.
                  Auf PHP-Fehler kann auch immer etwas schwer reagiert werden, darum würde ich innerhalb von Klassen immer eine entsprechende Exception werfen. Von diesen bekommst du dann auch ohne error_reporting was mit!
                  3. Direkt ausgeben aber mit was "besserem" als die()?
                  Siehe auch 2.
                  Oder sollen die Fehlermeldung zurück zur aufrufenden Datei geleitet werden und dort abgefangen werden?
                  Die Exception kann dann im Bereich des Methodenaufrufs gefangen werden.
                  -> Damit nicht jeder Kunde eine nicht-gefangene Exception sieht, solltest du einen ExceptionHandler einsetzen!

                  Kommentar


                  • #10
                    Original geschrieben von goth
                    Aha ... deshalb wohl solche Fehlermeldungen:
                    Ich meinte eigentlich die von PHP generierten Fehlermeldungen. Natürlich soll der Benutzer keine weiße Seite aufgetischt bekommen
                    [FONT="Helvetica"]twitter.com/unset[/FONT]

                    Shitstorm Podcast – Wöchentliches Auskotzen

                    Kommentar


                    • #11
                      Ich meinte eigentlich die von PHP generierten Fehlermeldungen. Natürlich soll der Benutzer keine weiße Seite aufgetischt bekommen
                      Ich nutze immer ganz gerne den ErrorHandler um diese Fehlermeldungen zu fangen und anschließend eine PhpRuntimeException zu werfen. So kann ich auf jeden Fehler reagieren!

                      Kommentar


                      • #12
                        Du kannst aber nicht alle PHP-Fehlermeldungen abfangen, daher generierte Fehler ausschalten. Aber irgendwie sage ich das jetzt auch schon zum dritten mal.
                        [FONT="Helvetica"]twitter.com/unset[/FONT]

                        Shitstorm Podcast – Wöchentliches Auskotzen

                        Kommentar


                        • #13
                          Du kannst aber nicht alle PHP-Fehlermeldungen abfangen, daher generierte Fehler ausschalten. Aber irgendwie sage ich das jetzt auch schon zum dritten mal.
                          Ich habe ja nichts gegen deine Aussage gesagt. Sollte eher ergänzend gemeint sein!

                          Kommentar


                          • #14
                            Du hast gesagt, du kannst auf jeden Fehler mit Exceptions reagieren. Das stimmt einfach nicht. Das wollte ich klar stellen! Aber ich habe eben gesehen, dass ich das doch noch nicht vorher erwähnte, hab wohl meinen Text in der Antwort auf goths Post nochmal editiert.
                            [FONT="Helvetica"]twitter.com/unset[/FONT]

                            Shitstorm Podcast – Wöchentliches Auskotzen

                            Kommentar


                            • #15
                              Du hast gesagt, du kannst auf jeden Fehler mit Exceptions reagieren. Das stimmt einfach nicht.
                              Ok, da hast du natürlich recht! Sollte natürlich erwähnt werden. Ich meinte auch eher die Warnings, die durch PHP-Funktionen generiert werden!

                              Kommentar

                              Lädt...
                              X