dedlfix: Return in try-catch-Block

Beitrag lesen

Hi!

public function getLocale()

{
        if ($this->_locale !== null) {
            return $this->_locale;
        } else if (($locale = self::getDefaultLocale()) !== null) {
            return $locale;
        } else {
            try {
                $locale = Zend_Registry::get('Zend_Locale');
            } catch (Zend_Exception $e) {
                $locale = null;
            }

if ($locale !== null) {
                return $locale;
            }
        }

return null;
    }


> >   
> > Hierbei wird ein try-catch-Block wie im vorherigen Beispiel verwendet (mal ganz abgesehen davon, dass die if-Abfrage innerhalb des else-Zweigs für mich sinnlos ist. Genauso gut könnte ich die weglassen und am Ende $locale zurückgeben).  
  
Also, ich sehe da auch keinen Sinn dahinter. Möglicherweise hat da einer, nach seinen Versuchen den Code für die Aufgabe zu erstellen, vergessen aufzuräumen. Das ist eine der Stellen, die nach einer Revision dazu führt, dass man in der Nachfolgeversion stolz einen Geschwindigkeitszuwachs berichten kann.  
  
Jedenfalls kann man den Code kürzen zu  
  
  public function getLocale()  
  {  
    if ($this->\_locale !== null) {  
      return $this->\_locale;  
    }  
    if (($locale = self::getDefaultLocale()) !== null) {  
      return $locale;  
    }  
    try {  
      return Zend\_Registry::get('Zend\_Locale');  
    } catch (Zend\_Exception $e) {  
      return null;  
    }  
  }  
  
Der Original-Code zeigt übrigens auch mal wieder sinnlose else-Zweige. Wenn der if-Zweig garantiert mit return beendet wird, kann der alternative Code gar nicht mehr ausgeführt werden und muss deshalb nicht in einem else-Block versteckt werden.  
  

> 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.  
  
Naja, man könnte das mit dem if wie bei self::getDefaultLocale() lösen, aber dann hat man immer noch nicht eventuelle Exceptions der Registry aus anderen Gründen als Nichtvorhandensein gefangen. Das try-catch muss also bleiben und macht das if überflüssig.  
  
  
Lo!