php4: try/catch - alternativen?

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

  • php4: try/catch - alternativen?

    hi!

    wie handhabt ihr das eigentlich mit der fehlerbehandlung unter php? php4 bringt ja keine try/catch anweisungen mit. gibt es brauchbare patterns als alternative?

    wenn eine funktion fehler produzieren kann, speichere ich den fehlertext bislang in ein array:
    PHP-Code:
    $error[] =" fehlertext"
    wenn in der selben funktion werte aus einer datenbank geholt werden, speichere ich die werte als assiziatives array $value.

    $error und $value werden zu einer variable $return zusammengefasst, die als rückgabewert der funktion dient. wenn fehler aufgetreten sind, liefert
    PHP-Code:
    isset($return['error']) 
    true, ansonsten false und leitet so ggf. eine fehlerkorrektur ein.

    der ansatz funktioniert zwar soweit, aber eine wirkliche alternative zu try/catch erscheint er mir nicht.

  • #2
    Es gibt noch eine andere Möglichkeit.
    Du könntest mit Hilfe der "Funktionen zur Ausgabesteuerung"
    Den Buffer, bevor die Ihn ausgibt auf Fehler überprüfen. Wenn Skriptfehler vorhanden sind, die das Skript abschmieren lassen hast du das herausgefunden, kannst dir den Fehler in eine Variable schreiben, clearst den Buffer wieder und schreibst z. B. deine eigene Fehlerprotokollseite oder reagierst irgendwie anders.
    Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

    Kommentar


    • #3
      sowas .. ?
      PHP-Code:
      if (!versuche_etwas()) {
          return 
      FALSE;

      in meiner sql klasse beispielsweise, teste ich nach jeder query einfach mit einer methode ob ein fehler auftrat (mysql_errno > 0 zurückgibt), wenn das der fall ist wird FALSE zurückgegeben und der fehler kann weiterbehandelt werden.

      anstelle des returns, kann man auch erst noch einene beliebigen block code parsen lassen und dann erst aus der methode springen.

      Kommentar


      • #4
        So kann man es auch machen, jedoch sind hier deine Möglichkeiten sehr niedrig gesteckt. Da du ja selbst immer sagen muss "Wenn Fehler auftritt, dann mache...".
        Mit dem Vorschlag von mir, ist es dir möglich diese Fehler (Parserfehler, etc) von PHP abfangen zu lassen.
        Ans Ziel kommt nur der, der auch eins hat. www.e-cross.info

        Kommentar


        • #5
          also ich hatte bisher auch immer ein $error array ..
          am ende der funktion habe ich abgefrage ob das array leer ist, wenn nein wird false oder ne entsprechende konstante oder das $error array selbst zurückgegeben ..
          je nach zweck halt unterschiedlich ..
          in einer klassen methode die konstante .. weil ich da weiß dass wenn ich nen fehler hab, welcher das sein muss
          bei einer normalen funktion gibts ein false ..
          wenn ich ein formular überprüfe dann das array, dieses wird dann zusammengeführt und als fehlermeldung auf der seite eingegeben, dass username / passwort nicht passt und solche scherze
          mfg,
          [color=#0080c0]Coragon[/color]

          Kommentar


          • #6
            also ich hatte bisher auch immer ein $error array ..
            am ende der funktion habe ich abgefrage ob das array leer ist, wenn nein wird false oder ne entsprechende konstante oder das $error array selbst zurückgegeben ..
            damit lassen sich funktionen verwirklichen, die keinen oder nur einen rückgabewert und beliebig viele fehlermeldungen zurückgeben können. nur was, wenn ebenso beliebig viele rückgabewerte verlangt werden?

            beispiel: eintrag in eine datenbank.

            die funktion überprüft, ob die formulardaten korrekt aufgefüllt wurden und speichert entsprechende fehler- oder erfolgsmeldungen in ein array. wenn keine fehler aufgetreten sind, werden die daten in die datenbank geschrieben und die werte, die in die datenbank geschrieben wurden als array zurückgegeben. falls fehler aufgetreten sind wird entsprechend das fehler-array zurückgegeben.

            Kommentar


            • #7
              Original geschrieben von Pascal P.
              So kann man es auch machen, jedoch sind hier deine Möglichkeiten sehr niedrig gesteckt. Da du ja selbst immer sagen muss "Wenn Fehler auftritt, dann mache...".
              Mit dem Vorschlag von mir, ist es dir möglich diese Fehler (Parserfehler, etc) von PHP abfangen zu lassen.
              dein vorschlag ist an sich nicht verkehrt, allerdings bedeutet er mir einen zu großen performance verlust.

              meine methode reicht mir, im zusammenhang mit sauberem code aus um alle fehler korrekt abzufangen.

              etwas anderes machst du ja ansich auch nicht, nur dass deine überprüfung einmal erfolgt, und meine mehrmals.

              Kommentar


              • #8
                danke für die antwort @ rythmus, aber:
                PHP-Code:
                if (!versuche_etwas()) {

                    return 
                FALSE;


                geht etwas am thema vorbei. es funktioniert, wie gesagt, nur, wenn kein rückgabewert, sondern nur fehlermeldungen verlangt werden.

                der rückgabewert einer funktion soll in einer neuen variablen gespeichert werden und entsprechend verarbeitet werden:

                PHP-Code:
                $foo versuche_etwas();

                if (isset(
                $foo['error'])) {
                    [
                fehlermeldungen ($foo['error']) ausgeben]
                } else {
                    [
                erfolgsmeldungen ($foo['value']) ausgeben]

                das ist mein ansatz im groben bisher und dafür würd ich alternativen suchen.

                Kommentar


                • #9
                  Original geschrieben von php_rookie
                  danke für die antwort @ rythmus, aber:
                  PHP-Code:
                  if (!versuche_etwas()) {

                      return 
                  FALSE;


                  geht etwas am thema vorbei. es funktioniert, wie gesagt, nur, wenn kein rückgabewert, sondern nur fehlermeldungen verlangt werden.

                  der rückgabewert einer funktion soll in einer neuen variablen gespeichert werden und entsprechend verarbeitet werden:

                  PHP-Code:
                  $foo versuche_etwas();

                  if (isset(
                  $foo['error'])) {
                      [
                  fehlermeldungen ($foo['error']) ausgeben]
                  } else {
                      [
                  erfolgsmeldungen ($foo['value']) ausgeben]

                  das ist mein ansatz im groben bisher und dafür würd ich alternativen suchen.
                  das ist nicht ganz richtig.
                  meine funktion kann gerne auch etwas zurückgeben.
                  entweder halt den erwarteteten wert, oder eben false.
                  PHP-Code:
                  $foo versuche_etwas() 
                  if (!
                  $foo) {} 

                  Kommentar


                  • #10
                    entweder halt den erwarteteten wert, oder eben false.
                    wie entscheidest du dann, ob es sich bei dem zurückgegebenen wert um gewünschte werte aus der datenbank, oder um fehlermeldungen handelt? beides wird in einem array gespeichert.

                    Kommentar


                    • #11
                      OffTopic:
                      blöde datenbank arbeiten!


                      wie bereits beschrieben, wenn FALSE zurückgegeben wird ist ein fehler aufgetreten.
                      wenn etwas anderes als false kommt, ist alles in ordnung.
                      wenn ich mehr fehlerinformationen brauche, lasse ich die mir von der methode "versuche_etwas()" in einem array, das als variable meiner klasse existiert speichern.

                      Kommentar


                      • #12
                        und wie bereits gesagt, das deckt sich nicht mit meiner frage und geht am thema vorbei. leider.

                        wenn nicht false zurück gegeben wird, kann nur EIN array zurückgegeben werden. dieses array beinhaltet ENTWEDER die gewünschten werte aus der datenbank, ODER fehlermeldungen. in einzelfällen soll jedoch beides möglich sein, also fehlermeldungen UND werte. es ist mit deiner methode nicht möglich zu unterscheiden, ob in dem zurückgegebenen array fehlermeldungen oder die gewünschten werte gespeichert sind.

                        mit try/catch kann sehr wohl unterschieden werden. es wird immer ein array mit den gewünschten werten zurückgegeben und falls fehler aufgetreten sind, wird eine exception geworfen und aufgefangen.

                        nunja. solang php5 noch nicht released wurde, werd ich wohl bei meiner methode bleiben.

                        Kommentar


                        • #13
                          als ganz gute alternative auch das hier: http://www.php.net/manual/de/functio...or-handler.php

                          Kommentar


                          • #14
                            auf den ersten blick genau das was ich haben wollte, danke schön!

                            Kommentar

                            Lädt...
                            X