Zend Framework: Vor- und Nachteile

Zur Beginn ganz kurz der Hinweis, dass der Blog jetzt über eine neue Adresse erreichbar ist: http://web-union.de/

League4u Relaunch Juni 2010

Und jetzt kann ich es endlich ankündigen. League4u – mein erstes erfolgreiches Projekt – startet in die neue Bundesliga-Saison 2010/2011 nicht nur mit einem neuen Outfit, sondern auch mit einem komplett neuen Unterbau. Der teilweise veraltete Code (inzwischen über 2,5 Jahre) hatte es aber auch mal nötig. Als ich damals angefangen habe League4u zu programmieren, habe ich noch auf alte PHP4-Techniken gesetzt und anschließend immer wieder verbessert.

Als neue Code-Basis habe ich mich für das Zend Framework entschieden und nicht wie derzeit auf eine Eigenentwicklung. Aus dem Grund kommen wir jetzt auch zum eigentlichen Thema.

Nachteile und Vorteile des Zend Frameworks

Nachteile:

  • Für PHP-Einsteiger sehr kompliziert
    PHP-Einsteigern rate ich generell von Frameworks ab, weil es immer besser ist, die Sprache ohne große Bibliotheken kennenzulernen
  • Dokumentation umfangreich, aber schwierig auf eigene Anwendungen zu projizieren
  • Bei sehr großen Projekten etwas perfomancelastig
  • Lange Einarbeitungszeit

Vorteile:

  • Sehr viele verschiedene Komponenten
    Im Normalfall bietet das ZF bereits alles, was ein Entwickler an Funktionen braucht
  • Durchdachte und einheitliche Programmstruktur
  • Äußerst stabil durch ständige Tests
  • Unterstützung durch Zend
  • In allen Bereichen erweiterbar, Optionen lassen sich fast immer anpassen
  • Fortlaufende Weiterentwicklung (jeden Monat ein neues Release)
  • Dokumentation umfangreich, zu allen Kompononeten und in verschiedenen Sprachen verfügbar
  • Zwingt den Entwickler zur sauberen Programmierung (MVC-Design)

Wie man sieht überwiegen die Vorteile, aber bei der Entscheidung für ein Framework hängt es immer von der Anwendung ab, die entstehen soll. Wenn nur wenig Zeit zur Verfügung steht und das Projekt nicht allzu groß ist, ist eine Eigenentwicklung wohl die schnellere Variante. Für League4u ist es auf jeden Fall die passendere Lösung auf ein stabile Code-Basis zu setzen, auch wenn es ein bisschen mehr Zeit braucht.

Autoloading àla Zend Framework

Wer hat sich schonmal gefragt, warum alle Klassen des Zend Frameworks immer so lang sein müssen? Zend_View_Helper_Navigation_Breadcrumbs, Zend_Db_Adapter_Pdo_Mysql oder auch sehr schön ist Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive.
Die Antwort ist ganz einfach: So lässt sich genau nachvollziehen, wo sich die Klasse befindet, denn aus dem Namen lässt sich das genaue Verzeichnis der Klasse ablesen. So liegt die Klasse Zend_View_Helper_Navigation_Breadcrumbs beispielsweise unter Zend/View/Helper/Navigation/Breadcrumbs.php. Dieses Schema bringt nicht nur Struktur in das Klassen-Chaos einer Anwendung, sondern bietet auch eine hervorragende Möglichkeit, die Klassen automatisch zu laden, ohne dass die Klasse jedes mal mit require_once inkludiert werden müssen. Dazu bedienen wir uns einfach der Funktion __autoload, die jedes mal aufgerufen wird, wenn eine Klasse verwendet wurde, die nicht existiert.

function __autoload($className)
{
    $classFile = implode("/", explode("_", $className)).".php";
    require_once(DEIN_ROOT_PFAD.$classFile);
}
$obj = new Zend_Db_Adapter_Pdo_Mysql(); // Lädt automatisch die Datei Zend/Db/Adapter/Pdo/Mysql.php

Natürlich lässt sich das noch weiter ausbauen und mit verschiedenen Include-Paths verwenden.
Wenn ihr also das nächste mal eine neue Anwendung plant, macht es Sinn, dasselbe Namensschema wie das Zend Framework oder PEAR zu nutzen. So müsst ihr euch nicht mehr darum kümmern, ob eine Klasse wirklich mit require oder include eingebunden wurde und die Klassen-Datei wird nur noch dann geladen, wenn sie tatsächlich gebraucht wird.

Und noch ein Tipp:
Mit Hilfe der Funktion spl_autoload_register($callback) lassen sich mehrere Autoloader gleichzeitig verwenden und können als Callback auch in eigene Klasse ausgelagert werden.