Jump to content
Sign in to follow this  
k00ni

Wie behandelt ihr aufkommende Fehler?

Recommended Posts

Hallo,


mich interessiert, wie ihr in euren Projekten mit auftretenden Fehlern umgeht. Macht ihr dies einfach über if-Anweisungen die true/false behandeln? Oder sendet ihr Fehlerobjekte zurück, die ihr dann später auswertet?


Nun wurde ja in PHP5 das Konstrukt try-catch eingefügt, was sich dafür ja besonders gut eignet.


Ich selbst bin mir noch nicht so sicher, wie ich das mit den lieben Fehlern mach soll. Zur Zeit fahre ich noch die "einfachste" Schiene über die if-Anweisung, welche das Resultat (true oder false) einer Funktion abfragt. Sehr sporadisch und äußerst uneffektiv, ich weiß.


@Powie: Ist von deiner Seite etwas geplant? Den scheinbar besitzen viele Funktionen und Anweisungen im pSys, die ich bis jetzt gesichtet habe, keinerlei von Fehlerbehandlung. Nur einfache Abfragen, die prüfen, ob dies oder jenes einen bestimmten Wert etc. besitzt. Wird es in zukünftigen Versionen ein einheitliches Modell geben? Gedanken dazu existieren bestimmt schon.



Grüße

Share this post


Link to post
Share on other sites

Hallo,


ich finde es ja schön, dass ihr hier abstimmt, aber wenn ihr den Punkt Ich nutze ein eigenes/anderes System... auswählt, dann schreibt bitte noch, was ihr genau implementiert habt, um eure Fehler zu behandeln.



Grüße

Share this post


Link to post
Share on other sites

Ab Version 5 die try/catch Methoden sind angenehm, kenne ich von Delphi her. Bin bisher noch nicht in die Verlegenheit gekommen diese nutzen zu müssen....

Share this post


Link to post
Share on other sites
Guest

Es ist auch wichtig welcher Art der Fehler ist... Oder etwa nicht?

Share this post


Link to post
Share on other sites
Es ist auch wichtig welcher Art der Fehler ist... Oder etwa nicht?

Ja und? :ugly:



Und dass sich der mahe und der Powie zurückhalten, dass war mir fasst schon klar :-D


Bei meiner Anfrage ist die Art des Fehlers nicht entscheidend, sondern wie man allgemein mit Fehlern umgeht. Es gibt ja nun mehrere Herangehensweisen. Die if-else-Variante geht ja nur, wenn man Zustände abfragt. Also ob eine Funktion true oder false zurückliefert. Oder ob Variable X eine Zahl ist. Und so weiter und so fort.

Per try-catch kann man die Art des Fehler besser abfragen. Denn dort können Fehlerobjekte "geworfen" werden, je nach Art können sie anders ausgewertet und auf sie reagiert werden.


Ich habe den Eindruck, als macht ihr euch keine so großen Sorgen, was bei Problemen, die während der Interpretierung eurer Skripte auftreten, so passiert. Entweder wird von vorn herein so programmiert, dass man einfach true-false-Konstrukte anwendet oder umgeht vieles , indem man einfach ein echo mysql_error (); schreibt. Soll der User selbst sehen, was er nun damit macht.


Würde ich so bei C# vorgehen, dann würde das Programm mir nur abschmieren. Ständig Exceptions, die nicht gefangen und verarbeitet werden. Irgendwo tritt immer mal etwas unvorhergesehenes auf: Falscher Datenbankname, Fehler im SQL-Query etc. Wenn man diese Fehler nie abfängt, dann kackt (fast) immer gleich die gesamte Anwendung ab; in PHP hört halt einfach das Skript auf und spuckt nen netten Text aus.


Mir ist ja klar, dass man immer Aufwand mit Nutzen abwiegen muss. Das heißt, dass ich mir bei einem kleinen Schnipselskript keine Fehlerbehandlungsroutine einbaue, die an sich doppelt so groß ist, wie das eigentliche Skript. Aber gerade bei Skripten die mit Datenbanken arbeiten, sollte man dort bestimmte Dinge beachten. Denn PHP gibt allgemeine Meldungen aus, oft auch Teile des SQL-Querys; die könnten dann auch mal sensible Daten enthalten. Und wenn Skripte in großen Portalseiten eingesetzt werden und diese mittendrin wegen eines Fehlers den Arsch hochmachen, dann zerknallts einen das Design oder bricht einfach nur mit einem 3 Zeiler ab.



Grüße

Share this post


Link to post
Share on other sites

und was habt ihr gegen "bool" :-o

try - catch, hmmm liest sich gut in der man

aber in php4 möglich?

Share this post


Link to post
Share on other sites

Hallo,


und was habt ihr gegen "bool" :-o

try - catch, hmmm liest sich gut in der man

aber in php4 möglich?



mit bool, also einfache Abfragen, ob etwas so oder so ist, kann man schon sehr effektiv arbeiten. Was ist aber, wenn du beispielsweise eine Funktion hast, die dir sagt, ob etwas bspw. in einer Datenbank existiert und dir dann je nachdem, true oder false zurückliefert? An sich sauber, gibt ja nur 2 Möglichkeiten... und wenn dir zwischendurch was mit der Datenbank passiert (Zuviele Verbindungen mit dem Server, keine Zugriff etc.), was dann ? Mir ging es auch um solche Fälle.



Grüße

Share this post


Link to post
Share on other sites
Guest
Was ist aber, wenn du beispielsweise eine Funktion hast, die dir sagt, ob etwas bspw. in einer Datenbank existiert und dir dann je nachdem, true oder false zurückliefert?

Einmal besteht natürlich die Möglichkeit, dass man die Booleans für die Fehlersignalisierung verwendet, für die Angabe, ob ein Eintrag existiert oder nicht, als Integer zurückgibt. Wenn man jetzt noch auf die fehlende Typsicherheit bei PHP achtet, kann man so ziemlich effektiv arbeiten.


Ich verwende aber in größeren Projekten eher Exceptions. In kleineren Projekten arbeite ich mit Error-Handlern, trigger_error() und natürlich Konditionen.

Share this post


Link to post
Share on other sites

Das lästige an der ganzen Sache ist, dass sich fatale Fehler (z.B. memory size exhausted beim Verändern von Grafiken usw.) nicht abfangen lassen. Gerade da, wo man es wirklich brauchen könnte :-/

Share this post


Link to post
Share on other sites

Hallo,


wird dass nicht über ein

 

catch (Exception $excep)
{
...
}

 

gefangen? An sich müsste dieser Konstruktur jede Art von Fehlern abfangen.

Share this post


Link to post
Share on other sites

Na wenn du den Code, wo deine Grafikroutinen drin stehen, hier rein schreibst, dürfte es theoretisch funktionieren.

 

try
{
// hier deine Grafikroutinen
}
catch (Exception $Exception)
{
echo $Exception;
}

 

Ich bin das nur aus C# gewöhnt, da wird alles abgefangen. Hierbei wird aus Exception eine Art Kontainer, wo alle Arten von Fehlern, die auftreten, reingepackt werden.


Wie gesagt, reine Vermutung. :-)

Share this post


Link to post
Share on other sites
Guest

Es gibt ein paar Randbedingungen, bei deren Auftreten Exception-Handling nicht funktioniert. Beispielsweise wenn man versucht, eine nichtvorhandene Datei unter Windows zu inkludieren und diesen Fehler mit try..catch abzufangen versucht.


Ebenso könnte ich mir vorstellen, dass wenn PHP der Speicher oder die Laufzeit ausgeht, kein Exception-Handling mehr durchgeführt wird. Daran sieht man schön, wie kaputt das Konzept, Laufzeit- und Speicherbeschränkung von dem Interpreter selbst verwalten zu lassen, ist.


"Nobody trusts those fuckers, you know that. Every Al ever built has an electromagnetic shotgun wired to its forehead."

Share this post


Link to post
Share on other sites

Nabend,


wie sieht es aus, wenn man einfach jede Funktion einen Text, eine Art Bericht zurückliefern lässt. Man könnte ihn dann checken und dann wenn er ungleich true ist, einfach ausgeben.

 


 

Bei kleinen Projekten und wenig Fehlerfällen bestimmt interessant. Denn es ist sehr simpel und der Programmierer brauch sich keine Sorgen um den Fehler machen, denn die Funktion gibt auf den Fehler zugeschnittene Meldungen zurück. Natürlich nur, wenn diese vorher auch so implementiert wurden. ;-)


Gedanken dazu?

Share this post


Link to post
Share on other sites
Guest

Warum nimmst Du da nicht gleich trigger_errror()? Dort kannst Du einerseits einen Fehlertext angeben, andererseits auch die Art des Fehlers definieren (Notice, Warning oder Fatal).


Du übersiehst außerdem, dass Du, wenn Du Fehlermeldungen einfach mit echo ausgibst, die entsprechenden Settings in PHP übergehst. So würden Fehlermeldungen selbst dann ausgegeben, wenn man display_errors auf Off gestellt hat. Außerdem werden Fehler nicht geloggt. Und ja, es gibt sehr gute Gründe dafür, display_errors zu deaktivieren. die() ist übrigens auch noch so eine Funktion, auf die man tunlichst verzichten sollte.



Nochmal zusammengefasst:

In größeren Projekten - also pi mal Daumen ab 100 Zeilen Code - sollte man sowieso PHP5 und damit auch Exceptions verwenden. Ansonsten unbedingt über trigger_error() das PHP-Fehlermanagement antriggern. Es kann nicht schaden, die Doku zu den eigenen Fehlerhandlern zu lesen.

Share this post


Link to post
Share on other sites

Hallo,


was du sagst, leuchtet mir ein. Ich habe ehrlich gesagt bis gerade eben noch nichts von trigger_error gehört. Werde mir das aber später noch einmal anschauen.


die() ist übrigens auch noch so eine Funktion, auf die man tunlichst verzichten sollte.


Was meinst du damit?

Share this post


Link to post
Share on other sites
Guest

Insofern, als dass damit eben das Skript sofort abgebrochen wird (ja, register_shutdown_function ist mir bekannt). Dies ist aber gar nicht immer die adäquate Reaktion auf einen Fehler. Auch für die/exit gilt, dass der übergebene String einfach ohne weiteres ausgegeben wird - also auch wieder kein PHP-Fehlermanagement.


Prinzipiell sollte Fehlermanagement so intelligent sein und bei kritischen Fehlern die Verarbeitung in einem definierten Zustand beenden: Beispielsweise nachdem Datenbankverbindungen getrennt und nicht mehr benötigte Daten freigegeben wurden.

Share this post


Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...