am 11. September 2009
Ich habe mich ja schonmal daran versucht zu beschreiben, wann man Exceptions verwenden soll. Welche Exeptions aber wann geworfen werden sollen, möchte ich heute angehen. PHP liefert nämlich mit der SPL schon out-of-the-box ein paar Exception mit, die man sich ja mal anschauen kann.
Um ganz ehrlich zu sein, habe ich die meisten der Exceptions selbst noch nicht verwendet, aber die Chance ist größer es mal zu tun, wenn ich sie hier jetzt mal eine Runde beschreibe. Es ist einfach sinnvoll etwas standardisiertes zu verwenden, wenn es nun mal schon da ist. Und da ich eh meine eh Ableitungshierarchie nicht frei wählen kann, nehme ich im besten immer die am ehesten passende Exception.
- BadFunctionCallException
Diese Exception wird geworfen, falls man einer Funktion nicht genügend Parameter übergibt oder falls der Parameter ein Callback auf eine undefinierte Funktion ist.
- BadMethodCallException
Naja wenn die obere Ausnahme dazu da ist für Funktionen zu gelten, dann wird diese das gleiche wohl für Methoden gelten. An der Stelle finde ich es natürlich irgendwie doof, dass auch Methoden functions sind und es damit irgendwie konfus ist.
- DomainException
Um ehrlich zu sein, habe ich keine Ahnung, was diese Exception soll. Die Doku sagt leider auch gar nichts. Ich kann einfach nur mal raten. Mein Tipp wäre, dass man diese Ausnahme dann verwendet, wenn man in seiner Domäne, also in seiner Applikation einen etwas aufzeigen will. Hmmm. Naja macht nicht so viel Sinn, oder? Egal. Ihr werdet bestimmt auch eure Tipps abgeben.
- InvalidArgumentException
Jetzt wird es wieder einfacher. Jedes mal, wenn ein Argument, also ein Parameter einer Funktion, nicht vom richtigen Typ ist, dann wird diese Ausnahme geworfen. Hatten wir ja schon ausgiebig im Beispiel von Claus.
- LengthException
Naja wie sinnvoll eine Exception ist, die dafür da ist bei falschen Längen anzuschlagen weiß ich nicht. Auf jeden Fall gibt es sie in PHP. Anwendungsfall könnte hier sein, dass man einen String als Parameter braucht, der einen Ländercode repräsentiert und der muss genau drei Zeichen lang sein. Aber auch da würde ich eine andere Exception werfen.
- LogicException
“Exception thrown if a logic expression is invalid”. Soviel zu der Beschreibung, die uns php.net liefert. Falls ich einen logischen Audruck habe, der nicht gültig ist, so merkt das doch eigentlich der Interpretor, oder? Komische Sache.
- OutOfBoundsException
Ok, das macht wieder Sinn. Sobald ich einen Schlüssel habe, der in meinem Array/Objekt nicht gfunden wurde, werfe ich diese Exception.
- OutOfRangeException
Hier würde ich mal sagen, dass man diese Excpetion verwenden sollte, wenn eine Variable zwar vom gewünschten Typ ist, aber nicht im passenden Wertebereich wiederzufinden ist.
- OverflowException
Sobald ich einen Container habe, der zu voll wird, bekomme ich eine solche Excpetion vor die Nase geknallt. Macht Sinn. Falls man mal eine Cache Klasse z.B. bauen will, die eine limitierte Anzahl von Elementen halten kann,
- RangeException
“Exception thrown when an invalid range is given.” Mal wieder keine Ahnung, was mit php.net da sagen will. Vielleicht muss ein Wert in einem bestimmten Wertebereich liegen und wenn er das nicht tut, dann wird was geworfen. Würde aber nicht so perfekt zu der englischen Erklärung passen.
- RuntimeException
So, hier kann man alles mit kontrollieren was nur während der Laufzeit auftreten kann. Was wäre das zum Beispiel? Der Selenium Treiber wirft glaube ich eine solche Ausnahme, wenn der Kontakt zum Server abegebrochen ist.
- UnderflowException
Ich versuche aus einem leeren Container etwas zu entfernen und Boooom! Underflow Exception. Oder wir war das noch mal, wenn in ein Haus zwei Leute reingehen, dann drei rausgehen, dann muss erst eine Person reingehen, damit das Haus leer ist.
- UnexpectedValueException
Ähnlich wie meine Theorie zum Wertebereich bei der RangeException, muss es hier ein Wert aus einem bestimmten Wertesatz sein. Vielleicht alles was vorher über ein Konstante definiert wurde oder ähnliches.
So das waren auch schon dei Exception, die PHP so mit sich bringt. Viele davon halte ich für eher unnötig. Hätte ich selbst vorher nicht gedacht, als ich den Artikel angefangen habe. Trotzdem werde ich die, die ich für sinnvoll erachte auch einsetzen und selbstdefinierten vorziehen. Zumindest werde ich meine Ableitungen besser wählen.