Normalerweise, wenn ich ein Problem habe, mache ich was tausende Leute auch machen. Googeln. Leider habe ich diesmal nicht wirklich etwas gefunden.
Problemstellung:
Ich bin gerade dabei eine ziemlich große mehrteilige API zu schreiben. Diese API wird von anderen Programmieren verwendet. Mein Problem ist nun, wie handle ich das ErrorReporting.
Klar, ich kann für jede meiner Hauptklassen eigene Exception Klassen schreiben, die müssten aber wiederum eigene Exception Codes ausgeben damit die Programmierer welche die API verwenden wissen wie sie darauf reagieren sollen. Eigentlich wollte ich es vermeiden eine Liste mit Fehlercodes zu erstellen. (ob nun mit oder ohne Exceptions)
Ich wollte Exceptions eigentlich nur verwenden wenn “Unerwartetes” passiert. ZB. keine Datenbankconnection, File konnte nicht ins Filesystem geschrieben werden… solche Dinge. Darüber hat auch Nils Langner in seinem Blog schon geschrieben.
Also liebe PHP-Bloggemeinde. Was ist die best Practice in so einem Fall ?
Trackback-URL
Hallo,
ich finde es wirklich am saubersten Exceptions zu definieren. Erstens kann ich sie dann ganz einfach fangen und muss mich auch nicht mit error codes rumschlagen. Ob eine Exception immer der richtige Weg ist, muss man wohl von Fall zu Fall entscheiden, aber vielleicht kannst du ja, falls du vor so einer Entscheidung stehst, wieder einen Blogpost machen und lässt deine Leser wieder drüber schauen.
Gruß,
Nils
PS: Der übrigens LANGNER heißt.
Hallo Nils, bin jetzt so verfahren das ich eine ErrorKlasse geschrieben habe über die alle exceptions laufen. Zusätzlich zur standard message meldung wird ein fehlercode und eine schwere des fehlers übergeben. So ist es für die Programmierer im frontend einfach zu entscheiden wie relevant der fehler im moment ist, und wie sie darauf reagieren müssen.
Der Fehlerklasse übergebe ich nur noch CodeNr und Schwere des Fehlers, den Text hohlt sie sich aus einer INI datei raus. Gleichzeitig werden fehler je nach debug.level noch in ein Filemitgeschrieben und optional an firephp gesendet.
Add ps: ups, habs korrigiert.
Ludwig