PHP-Frameworks
Baukästen für PHP-Entwickler

DeveloperIT-ProjekteSoftware

Seit dem Erscheinen von PHP 5 und den damit verbundenen objektorientierten Fähigkeiten erblickt ein neues Framework nach dem anderen das Licht der Welt. Dieser Artikel vergleicht aktuelle, populäre Frameworks.

Ankzeptanz von PHP in Unternehmen

PHP-Frameworks

Der Einsatz von PHP auch für komplexe Unternehmensanwendungen wird salonfähig. Seit mit der Version 5 die Objektorientierung vollständig in PHP Einzug gehalten hat, nimmt die Akzeptanz von PHP im Unternehmensumfeld weiter zu. Dadurch wandelt sich auch die Entwicklungsarbeit an sich. Während kleinere Webseiten und Anwendungen oftmals aus der Retorte stammen – Stichwort Open Source – oder einfach schnell von Grund auf neu entwickelt werden, ist dies bei großen Enterprise-Anwendungen kaum noch möglich. Hier schlägt die Stunde der Web-Frameworks.

Diese Frameworks stellen dem Entwickler eine Basis zur Verfügung, die sich um häufig wiederkehrende Aufgaben kümmert. Die Entwicklung einer Web-Anwendung mit einem Framework spart somit einiges an Arbeit – und damit Zeit. Frameworks sind jedoch keine komplett neue Erscheinung. In anderen Programmiersprachen sind sie schon lange etwas Alltägliches. Auch für PHP gibt es sie schon einige Jahre, die große Verbreitung findet allerdings erst in der jüngsten Zeit statt. Dieser Artikel nimmt sechs PHP-Frameworks und Ruby on Rails als den Vorreiter in Sachen schneller Web-Entwicklung unter die Lupe.


Schichten und Modelle

PHP-Frameworks

Alle hier vorgestellten Frameworks setzen auf eine Trennung des Quellcodes in verschiedene Aufgabenbereiche. Hier kommt hauptsächlich das so genannte Model-View-Controller-Muster zum Einsatz. MVC ist ein so genanntes Entwurfsmuster (englisch: Design Pattern) und bei der Erstellung grafischer Anwendungen sehr beliebt.

Der Clou des Ganzen liegt in der strikten Trennung zwischen Daten-, Anwendungs- und Anzeigelogik eines Programms. Der Model-Teil einer Anwendung übernimmt die Datenhaltung, also die Verwaltung und die Zugriffe auf die Anwendungsdaten in Dateien oder Datenbanken. Die View-Komponente ist für die Aufbereitung und Anzeige der Daten zuständig. Der Controller entscheidet, welche View und welches Model bei welchem Vorgang zum Einsatz kommen. Dadurch ergibt sich folgende Aufgabenzuordnung:

– Model: Datenlogik
– View: Anzeigelogik
– Controller: Steuerungslogik

Die Trennung der einzelnen Applikationsteile in diese drei Komponenten hat ihre Vorteile. So kann beispielsweise eine Model-Klasse von verschiedenen Anzeige-Klassen verwendet werden.


Werkzeugkasten

PHP-Frameworks

Ein gutes Framework bietet neben der Implementierung des MVC-Musters noch einige andere Funktionen. Zum Standard gehören beispielsweise die Unterstützung verschiedener Datenbanktypen. Durch den Einsatz von Datenbankabstraktionsschichten kann die für eine Applikation genutzte Datenbank geändert werden, ohne dass dazu der Quelltext angepasst werden muss. Viel Arbeit steckt bei der Entwicklung von komplexen Web-Anwendungen auch in der Programmierung des Sourcecodes für den Datenbankzugriff. Objektrelationales Mapping ist hier eine Technik, die den objektorientierten Zugriff auf relationale Datenbanken möglich macht und so viel Entwicklungszeit sparen kann. Auch Klassen zur einfachen Internationalisierung und Lokalisierung von Anwendungen sollten bei modernen Frameworks ebenso zum Standard gehören wie eine automatische Validierung von Formulardaten.

Große Anwendungen bestehen aus vielen Einzelseiten und müssen in der Regel mit sehr vielen Benutzerzugriffen zurechtkommen. Ein automatisches Caching von Daten und Einzelseiten ist daher ein wichtiger Bestandteil eines Frameworks.

Ein Hype der vergangenen Monate sind dynamische Bedienoberflächen mit Ajax. Idealerweise ist Ajax nahtlos in das Framework eingebunden und kann daher ohne großen Aufwand verwendet werden.


Revolutionär: Ruby on Rails

PHP-Frameworks

Alle im weiteren Verlauf des Artikels gezeigten Frameworks sind mit PHP implementiert. Viele von ihnen eifern allerdings einem Vorbild nach. Wie der Name Ruby on Rails bereits aussagt, ist das meist RoR genannte Framework in der Sprache Ruby implementiert und hat mit seinem Erscheinen für einigen Wirbel gesorgt und eine kleine Revolution der Framework-Ansätze ausgelöst. Durch die Einführung von Kommandozeilen-Tools zur Verwaltung des Systems, zum Beispiel das Caching, und der automatischen Erzeugung von Quellcode für die drei Bestandteile Model, View und Controller sowie die nahtlose Integration von Techniken wie Object Relational Mapping (ORM) und Ajax in das Framework hat sich RoR den Ruf erarbeitet, die Entwicklungszeit von Web-Anwendungen drastisch zu verkürzen und allen anderen Sprachen im Webbereich überlegen zu sein. Ruby on Rails bietet alles, was das Entwickler-Herz begehrt, sowohl Active Records und ORM als auch Ajax, Caching und vieles andere mehr.

Da eine Vielzahl von PHP-Frameworks die Philosophie von Ruby on Rails übernommen haben, ist allerdings der Zeitvorteil bei der Entwicklung kaum noch vorhanden. Außerdem muss man sich der Tatsache bewusst sein, dass es für PHP eine Fülle von Erweiterungen und Bibliotheken gibt, für die in Ruby keine Entsprechung verfügbar ist. Die jeweils aktuellste Version von Ruby on Rails ist auf der Projektseite www.rubyonrails.com erhältlich.


Bolide: Zend-Framework

PHP-Frameworks

Von allen hier vorgestellten Frameworks ist das Zend-Framework (framework.zend.com) mit das jüngste. Es wird seit Anfang des Jahres im Rahmen des Zend Collaboration Projects entwickelt und basiert vollständig auf PHP 5. Die Ausrichtung des Zend-Frameworks ist eher klassisch: Es besteht aus einer Reihe von Kern-Klassen, mit denen eine Model-View-Controller-Anwendung umgesetzt werden kann. Zusätzlich werden weitere nützliche Komponenten mitgeliefert, mit denen es beispielsweise möglich ist, E-Mails zu versenden, News-Feeds zu erstellen, eine Volltextsuche oder Webservices zu implementieren.

Durch das geringe Alter hat das Zend-Framework bei weitem noch nicht den Funktionsumfang anderer Projekte erreicht. So sind weder ein Template-System, ORM, Ajax-Unterstützung, Internationalisierung noch weitere Framework-typische Features vorhanden. Auch eine automatische Quellcode-Generierung sucht man im Moment noch vergebens. Zum aktuellen Zeitpunkt ist das Zend-Framework nur bedingt für den Einsatz auf Shared Servern geeignet, da es neben PHP 5 mit installiertem PDO auch noch einen Eintrag in einer .htaccess-Datei benötigt, der nicht auf allen Shared-Hosting-Webservern erlaubt ist.

Die Entwicklung des Zend-Frameworks fand ein geteiltes Echo in der PHP-Community. Während viele ein dauerhaft gepflegtes und sauber dokumentiertes Framework begrüßen, befürchten viele eine Monokultur der Web-Entwicklungs-Frameworks. Dies ist nicht ganz von der Hand zu weisen. Allein der Name Zend bewirkt bereits heute, dass viele dieses Framework als ein absolutes Muss betrachten und ihm den Vorzug gegenüber anderen, bereits weiter entwickelten Frameworks geben.


PHP in HiFi: Symfony

PHP-Frameworks

Symfony ist eines der bekanntesten Frameworks für PHP. Es folgt dem Best-Practice-Ansatz. Statt jede Funktionalität selbst zu entwickeln, haben sich die Macher von Symfony dazu entschlossen, bereits existierende Projekte als Basis eines eigenen Frameworks zu verwenden. So integriert Symfony das Gespann Propel und Creole zum objektorientierten Zugriff auf verschiedene Datenbank-Typen. Javascript-basierte Oberflächen und Ajax werden durch die Verwendung von Scriptacolous implementiert. Der MVC-Kern basiert auf Mojavi.

Darüber hinaus bietet Symfony eine riesige Anzahl an Funktionen und gilt zu Recht als eines der umfangreichsten Web-Frameworks für PHP. Nahezu alle Parameter eines Systems lassen sich über die Konfigurationsdateien an eigene Bedürfnisse anpassen.

Doch gerade die riesige Menge an Funktionen macht auch einen der größten Nachteile von Symfony aus. Manches lässt sich mit ander
en Frameworks einfacher implementieren, und die Lernkurve ist relativ steil. Glücklicherweise ist auf der Projektseite www.symfony-project.org eine sehr ausführliche Dokumentation verfügbar. Auch der Support durch die mittlerweile sehr große Community ist durchweg gut.

Zudem bietet Symfony ähnlich wie Ruby on Rails eine automatische Quellcode-Generierung. Mit einem Kommandozeilen-Tool lassen sich Klassengerüste für Model, View und Controller erstellen, die bereits alle grundlegenden Operationen implementieren. Durch die beeindruckende Funktionsfülle kann Symfony auch für große Projekte bedenkenlos eingesetzt werden.

Der Einsatz von Symfony auf Shared-Hosting-Servern ist nicht immer einfach. Als Grundvoraussetzung ist ein Server mit PHP 5 notwendig, wobei Symfony mit PHP 5.1.2 so seine Probleme hat. Auch müssen die PHP-Parameter magic_quote_gpc und register_globals auf Off gestellt sein, damit Symfony seine Arbeit verrichten kann.


Knusprig: Cake PHP

PHP-Frameworks

Cake PHP (www.cakephp.org) versucht, die Entwicklungsphilosophie von Ruby on Rails nach PHP zu portieren. Auch Cake PHP basiert auf dem MVC-Pattern. Ähnlich wie Symfony nimmt es dem Anwender nahezu alles ab, was mit dem Zugriff auf die Datenbank zusammenhängt, und unterstützt sowohl mehrere Datenbanktypen als auch objektrelationales Mapping. Cake PHP bringt mit dem Kommandozeilen-Tool bake die Möglichkeit mit, Quellcode automatisch zu erzeugen. Neben den Standard-Funktionen wie Caching, Internationalisierung und Scaffolding bietet Cake PHP ein besonderes Feature. Durch den so genannten Data Sanitization Filter werden automatisch Formulardaten auf sicherheitsbedenkliche Zeichenketten untersucht.

Die Cake-Entwickler nehmen für ihr Framework in Anspruch, dass es nahezu ohne Konfigurationsarbeit auskommt und sowohl der Einstieg als auch die spätere Verwendung besonders einfach sein sollen. Cake PHP funktioniert auf allen Servern mit PHP 4.3.2 oder neuer. Wie viele andere Frameworks setzt Cake voraus, dass durch eine .htaccess-Datei Parameter des Webservers geändert werden können – zum Beispiel für das URL-Rewriting.


Überflieger: Seagull

PHP-Frameworks

Obwohl das Seagull-Projekt (seagull.phpkitchen.com) bereits 2001 in Leben gerufen wurde, ist es eines der weniger bekannten Frameworks. Zu Unrecht: Das unter seagull.phpkitchen.com erhältliche Framework bietet sehr viele der für die PHP-Entwicklung notwendigen Funktionen. Wie nahezu alle hier vorgestellten Frameworks arbeitet auch Seagull nach dem MVC-Prinzip. Die Liste der unterstützten Features ist lang, mehrere Datenbanktypen und ORM werden ebenso unterstützt wie Internationalisierung und Formular-Validierung. Eine Besonderheit gegenüber den anderen hier vorgestellten Lösungen ist, dass Seagull bereits fertige Module für die Erstellung von Internet-Seiten mitbringt. Fertigen Code gibt es zum Beispiel für Content-, File- und Benutzer-Management-Funktionen. So lassen sich dynamische Webseiten sehr einfach mit Content-Management-Funktionen ausstatten.

Ein nicht zu verachtender Vorteil von Seagull ist die Tatsache, dass nahezu keine Abhängigkeiten zu anderer Software vorhanden sind. Ein Einsatz auf einem Shared-Hosting-Paket gelingt in der Regel völlig problemlos. Seagull benötigt lediglich PHP in der Version 4.3.11 oder höher und setzt keine weiteren PHP-Module voraus.


Helfer in der Not: Code Igniter

PHP-Frameworks

Code Igniter (www.code-igniter.com) stammt aus der Feder der Macher des CMS Expression Engine (www.pmachine.com/ee). Trotz seines geringen Alters ist hier ein Framework entstanden, das bereits eine Vielzahl von Funktionen mitliefert und sich nur selten hinter der etablierten Konkurrenz verstecken muss. Die Entwickler des Projekts legen dabei vor allem Wert auf eine gute Dokumentation. Diese wird immer schnell an neue Versionen angepasst und bietet umfangreiche Informationen zu allen Funktionen des Frameworks.

Auch Code Igniter basiert auf PHP 4, kann aber ebenso auf Servern mit PHP 5 eingesetzt werden. Ein Einsatz auf Shared-Hosting-Paketen ist problemlos möglich, da das Framework relativ geringe Abhängigkeiten besitzt. Größter Nachteil ist die feste Verdrahtung des Frameworks mit MySQL. Die Verwendung anderer Datenbanken wie PostgreSQL, SQLite oder Oracle sind nicht möglich. Da dies Standard eines guten Frameworks ist, kann aber davon ausgegangen werden, dass dies in Zukunft noch in Code Igniter Einzug hält.


Events & Komponenten: Prado

PHP-Frameworks

In der Welt der PHP-Frameworks ist Prado (www.pradosoft.com) schon fast ein Urgestein. Es entstand im Rahmen des Zend PHP5 Coding Contests und ist seit einigen Monaten in der Version 3 verfügbar. Der Name Prado steht für PHP Rapid Application Development Object-oriented. Anders als die bisher gezeigten Frameworks liegt hier nicht das MVC-Muster, sondern ein komponentenorientierter und Event-basierter Ansatz zu Grunde. Entwickler die bereits mit ASP.NET oder Sprachen wie Delphi in Berührung gekommen sind, werden einige Gemeinsamkeiten entdecken.

Grob verallgemeinert besteht eine Prado-Web-Anwendung aus einer XML-Spezifikationsdatei und einer Reihe von Template-Dateien mit jeweils zugehöriger PHP-Datei. Zwischen diesen beiden letztgenannten Dateien herrscht eine enge Beziehung. Im Template kann auf die Daten der PHP-Datei zugegriffen werden. Auch ist die PHP-Datei das Ziel von Events. So kann beispielsweise dem onClick-Event eine PHP-Funktion hinterlegt werden, die aufgerufen wird, wenn der Button geklickt wird. Das komplette Handling der Daten übernimmt dabei das Framework.

Prado geht in vielen Aspekten andere Wege als andere Frameworks. Vieles, was mit anderen Frameworks schwierig ist, geht bei Prado recht einfach. Allerdings gibt es auch in der Version 3 immer noch Eigenheiten, die Stunden der Suche und Implementierung kosten können.

Die besondere Stärke von Prado liegt in der Erweiterungsfähigkeit durch Komponenten, von denen auch eine Vielzahl verfügbar sind. Der Großteil bezieht sich dabei auf User-Interface-Komponenten wie beispielsweise Grid-Tabellen und anderes. Serverseitige Komponenten gibt es weniger, und hier bieten andere Frameworks schon einiges mehr. Auch erschließt sich die Event-basierte Arbeitsweise nicht jedem Entwickler gleich auf Anhieb. Die Dokumentation hat zwar gegenüber früheren Versionen von Prado deutlich an Qualität zugelegt, weist aber immer noch einige Lücken auf, die die Arbeit etwas erschweren.

Der Einsatz der Prado-Version 3 auf einem Shared-Hosting-Paket ist durch die hohen Anforderungen kaum möglich. Die neueste Version des Frameworks setzt PHP 5.1 voraus, das noch bei fast keinem Provider installiert ist.


Empfehlung

PHP-Frameworks

Alle hier vorgestellten Frameworks erfüllen ihren Zweck: dem Entwickler Arbeit abzunehmen und die Entwicklungszeit zu verkürzen. Darüber hinaus variiert der Funktionsumfang deutlich. Da die Auswahl eines Frameworks sehr stark von den eigenen Anforderungen, Rahmenbedingungen und Vorlieben abhängt, ist eine eindeutige Empfehlung schwierig. Wer die Möglichkeit hat, PHP 5 einzusetzen und große Projekte damit umsetzen will, kann getrost zu Symfony oder Cake PHP greifen. Das Zend Framework sollten Sie ebenfalls im Auge behalten. Zwar kämpft es im momentanen Zustand noch mit einigen Lücken. Aber allein die Tatsache, dass Zend hinter der Entwicklung steht, garantiert eine kontinuierliche Weiterentwicklung und eine große Popularität. Wem nur ein Server mit PHP 4 zur Verfügung steht, für den ist Seagull eine gute Wahl.
Es bietet von einigen Ausnahmen abgesehen alles, was man von einem guten Framework erwartet.