dedlfix: Return in try-catch-Block

Beitrag lesen

Hi!

Wobei sich natürlich die Frage stellt, ob in diesem Fall die Verwendung von try...catch überhaupt Sinn macht. Zend_Registry erweitert ja ArrayObject, sodass ich mit einer einfachen if-Abfrage prüfen kann, ob ein Schlüssel im Array (Zend_Registry) existiert. Denn meines Wissens ist ein try...catch die schlechtere Alternative zu einer if-Abfrage.
Bei dem folgenden Absatz bin ich mir nicht ganz sicher, wie Du das meinst:
Naja, man könnte das mit dem if wie bei self::getDefaultLocale() lösen,
wie würdest Du das machen? In dem Fall kann ich doch nicht auf null prüfen, oder?

Einfach nur try-catch und fertig, also so wie in meinem Code. Wenn du trotzdem if nehmen willst, musst du schauen, was für potentielle Ergebnisse du bekommen kannst, dann weißt du, auf was du prüfen kannst.

aber dann hat man immer noch nicht eventuelle Exceptions der Registry aus anderen Gründen als Nichtvorhandensein gefangen.
Da wäre die Frage: Will man das denn?

Kommt drauf an. Dazu müsste man sich die Registry ansehen, um herauszufinden, welche Exceptions sie werfen kann und wie sinnvoll ein Abfangen und Ignorieren (wie in diesem Fall) ist.

Ich möchte doch eigentlich nur auf Vorhandensein eines Schlüssels prüfen. Wenn die Registry aus welchem Grund auch immer eine andere Exception wirft, kann ich die in einer Funktion wie der oben genannten doch nicht sinnvoll verarbeiten. Würde ich auch die anderen Ausnahmen fangen (was hier ja passiert), hätte doch beispielsweise der Front-Controller keine Möglichkeit etwas zu "korrigieren".

Für diesen speziellen Fall kann man sich die Auswirkungen anschauen, wenn man den Registry-Code kennt. Dan kann man entscheiden, ob das try-catch da sinnvoll ist oder nicht. Es kann gut sein, dass es ebenfalls ein Überbleibsel aus einer Zeit ist, als die Registry Exceptions warf, wenn sie das jetzt nicht mehr machen sollte. (Ich weiß das nicht, weil ich es mir nicht angesehen habe.) Dann könnte man das streichen und mit einem if arbeiten.

Der FrontController kann aber auch mit einem null-Ergebnis "korrigieren". Vermutlich bringt es ihm keine Zusatzpunkte, wenn er die genaue Ursache des Locale-Holen-Misslingens kennt.

Wäre nicht beispielsweise folgendes Konstrukt ohne try...catch denkbar (und wie sinnvoll wäre es?):
return (array_key_exists('Zend_Locale', Zend_Registry::getInstance())) ? Zend_Registry::get('Zend_Locale') : null;

Ja, wenn einerseits es keine Exceptions beim Abarbeiten des Codes geben kann oder aber du Exceptions unbehandelt weiterreichen willst.
Allerdings musst du dann im aufrufenden Code sowohl auf null prüfen als auch Exceptions abfangen (angenommen es gibt potentiell welche).

Lo!