Hey dedlfix,
Was würdest Du in diesem Fall empfehlen? Try...catch oder if...else?
In dem Fall kannst du auf das Vorhandensein prüfen und hättest keine weitere Exception mehr zu befürchten. Hier wäre meiner Meinung nach auch eine Vorherprüfung angebracht, denn das ist ja ein ganz normaler Zustand und keine Ausnahme.
Das freut mich, dass Du das auch empfehlen würdest. So komme ich den Best Practices immer ein Stück näher.
Da fällt mir grad noch etwas ein. In welcher Reihenfolge schreibt man als Best Practice eigentlich die verschiedenen Statements? Also, ich meine folgendes: Schreibt man besser
if ($test == 1) {
} elseif ($test == 2) {
}
oder
if (1 == $test) {
} elseif (2 == $test) {
}
? Ich weiß, das ist eine unwichtige Frage, weil's ja das gleiche ist, es interessiert mich aber. Ich habe mal gelesen (weiß leider nicht mehr wo und finde grade auf die Schnelle auch nichts), dass das zweite Beispiel zu bevorzugen sei, da es übersichtlicher ist. Man könne schneller die relevante Information erkennen (wobei mein obiges Beispiel nicht sehr gut ist, für so ein Konstrukt könnte ich auch switch verwenden). Intuitiv würde ich die erste Variante bevorzugen.
[...]
Es kommt drauf an, was es für dich bedeutet, wenn keine Locale verfügbar ist. Daraufhin musst du deine Fehlerbehandlung (hier das Reagieren, wenn null zurückgegeben wird) ausrichten - also entweder hier reagieren oder das in einer anderen Ebene des Aufrufstacks behandeln, dann gibt es nur eine Benachrichtigung "nach oben", in welcher Form auch immer (nicht gefangene oder wieder ausgelöste Exception oder ein spezieller Rückgabewert).
Gut, dann habe ich das doch soweit verstanden. In diesem Fall würde ich also wohl den Fehler in der Methode, die getLocale() aufruft, behandeln. Und dann, wenn ich eine Lokalisierung zwingend brauche, wohl erst hier eine Exception werfen. Wenn ich die Lokalisierung nicht zwingend brauche, würde ich den Fehler bzw. null-Wert einfach übergehen.
Da muss ich mir nochmal was mehr Mühe bei jeder einzelnen Methode geben, wenn es um solch eine Fehlerbehandlung geht. Bisher hab ich in den meisten Fällen eine Exception geworfen, die dann immer weiter nach oben gereicht wurde (meist bis zum FC). In den seltensten Fällen hat eine aufrufende Methode evtl. auftretende Fehler abgefangen und verarbeitet (einzige Ausnahme, die mir gerade einfällt, war ein Aufruf meiner Klasse File; hier wurden Fehler direkt aufgefangen, beispielsweise wenn eine Datei nicht vorhanden war, da man damit rechnen konnte).
Das war immer mein Gedanke, dass ich eine Exception so weit durchreichen lasse, bis sich eine Instanz meldet, die mit diesem Fehler umgehen kann. Im "schlimmsten" Fall wäre das also ein Exception-Handler, der eine Fehlerseite ausgibt.
Ich würde mir da kein Prinzip auferlegen, sondern fallweise entscheiden, welches die beste Behandlungsweise und -ort ist.
Da muss ich mir, wie oben gesagt, mehr Mühe geben. Aber Du jetzt die fallweise Betrachtung erwähnst: So werde ich es in Zukunft machen.
Danke, dedlfix!
Gruß, Dennis