evaluierung von php frameworks

37
Bakkalaureatsarbeit Evaluierung von PHP Frameworks Christoph Lipautz ————————————– Technische Universit¨ at Graz Graz University of Technology

Upload: martin

Post on 26-Jun-2015

2.067 views

Category:

Documents


2 download

DESCRIPTION

Bakkalaureatsarbeit von Christoph Lipautz

TRANSCRIPT

Page 1: Evaluierung von PHP Frameworks

Bakkalaureatsarbeit

Evaluierung von PHP Frameworks

Christoph Lipautz

————————————–

Technische Universitat Graz

Graz University of Technology

Page 2: Evaluierung von PHP Frameworks

Eidesstattliche Erklarung

Ich erklare an Eides statt, dass ich die vorliegende Arbeit selbststandig verfasst, andere

als die angegebenen Quellen/Hilfsmittel nicht benutzt und die den benutzten Quellen

wortlich und inhaltlich entnommenen Stellen als solche kenntlich gemacht habe.

Graz, am 28. November 2010

Unterschrift

ii

Page 3: Evaluierung von PHP Frameworks

Kurzfassung

Die Wahl einer geeigneten Entwicklungsumgebung ist der Grundstein fur

die erfolgreiche Umsetzung eines Webprojektes. Aus der verbreiteten freien

Skriptsprache PHP haben sich eine Reihe von Software Frameworks entwi-

ckelt. Diese unterscheiden sich in ihrem Aufbau sowie ihrer Verwendung.

Abhangig von der Spezifikation eines Projektes soll ein geeignetes PHP

Framework gefunden werden. Diese Arbeit gibt eine Ubersicht moderner

Frameworks, aktueller Konzepte und einigen Vorzuge in deren Verwendung.

Im Detail werden drei PHP Frameworks betrachtet, eine Gegenuberstellung

durchgefuhrt und Unterschiede aufgezeigt.

iii

Page 4: Evaluierung von PHP Frameworks

Abstract

Choosing an appropriate environment bases a successful implementation

of a web project. From the popular free available script language PHP, a

number of software frameworks have been developed. These differ in their

construction and use. Depending on the specification of a project, an ap-

propriate PHP Framework has to be found. This work provides an overview

of modern frameworks, current approaches and some advantages in their

useage. In detail, three PHP frameworks are considered and compared as

well as main differences pointed out.

iv

Page 5: Evaluierung von PHP Frameworks

Inhaltsverzeichnis

1 Einfuhrung 1

1.1 Ausgangssituation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Die Skriptsprache PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3 Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.4 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.5 Warum ein PHP Framework verwenden? . . . . . . . . . . . . . . . . . 3

1.6 Was erwarte ich mir von einem PHP Framework . . . . . . . . . . . . . 4

2 Grundlegende Konzepte 8

2.1 MVC Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2 CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.3 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3.1 Object-Relational-Mapping . . . . . . . . . . . . . . . . . . . . 10

2.3.2 Active Record Pattern . . . . . . . . . . . . . . . . . . . . . . . 10

2.4 RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 Ubersicht von bekannten PHP Frameworks 12

3.1 Adventure PHP Framework (APF) . . . . . . . . . . . . . . . . . . . . 12

3.2 Akelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.3 CakePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.4 Codeigniter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.5 eZ Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3.6 PHPDevShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.7 Prado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

3.8 Seagull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.9 symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.10 Trax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3.11 Yii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.12 Zend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

3.13 Zoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Yii, symfony und das Zend Framework 18

4.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

v

Page 6: Evaluierung von PHP Frameworks

4.1.1 Beispielcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

4.1.2 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.2 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.2.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.3 Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4.3.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.4 Komponenten eines Framework . . . . . . . . . . . . . . . . . . . . . . 22

4.4.1 Formular und Formularvalidierung . . . . . . . . . . . . . . . . 22

4.4.2 Internationalisierung und Lokalisierung . . . . . . . . . . . . . . 23

4.4.3 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.4.4 Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.4.5 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.4.6 Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5 Zusammenfassung und Ausblick 28

6 Anhang A - Entscheidungsmatrix 30

vi

Page 7: Evaluierung von PHP Frameworks

1 Einfuhrung

1.1 Ausgangssituation

Das World Wide Web beschrankt sich nicht nur auf die Darstellung einfacher stati-

scher Seiten die untereinander verlinkt sind, sondern dient auch als Oberflache fur

verteilte Programme, den Webanwendungen. Durch die steigende Komplexitat dieser

Anwendungen definiert sich die Notwendigkeit von performanter, stabiler und flexibler

Software. Die Entwicklung immer leistungsfahigerer Hardware, nach dem Gesetz von

Moore, ermoglicht schnellere Server sowie Internetverbindungen. Dies fuhrte wiederum

zur Moglichkeit, anspruchsvolle Applikationen innerhalb des Web zu betreiben. Was

fruher in einfachen, verteilten, meist voneinander unabhangigen Skripten ausgefuhrt

wurde, wird heute in großen Softwaresystemen verarbeitet. Die Verwendung solcher

Softwaresysteme ermoglicht die Darstellung von dynamischen Inhalten. Es entstehen

durchaus große Datensammlungen, die in geeigneter Form verarbeitet und abgebildet

werden mussen. Vermehrt gewinnt die Interaktion des Benutzers mit diesen Anwendun-

gen an Bedeutung. Weiters werden Desktop-Anwendungen zur Verwendung in einen

Internetbrowser portiert.

Bei der Ausfuhrung der Software in einer Webumgebung unterscheidet man zwischen

Server- und Client-seitiger Abarbeitung. In einer Server-seitigen Anwendung erfolgt die

Ausfuhrung vollstandig auf dem entfernten Server, wohingegen eine Client-seitige Ab-

arbeitung direkt auf Rechner des Nutzers erfolgt. Diese Arbeit konzentriert sich auf die

freie Skriptsprache PHP: Hypertext Preprocessor, welche am Server ausgefuhrt wird.

Sie wachst stetig in ihrem Funktionsumfang und bietet neue Konzepte. Durch die

fortlaufende Weiterentwicklung hat sich PHP etabliert und sich gegenuber anderen

Skriptsprachen wie zum Beispiel Perl durchgesetzt. Durch abgegrenzte Moglichkei-

ten des World Wide Web, bzw. des HTTP-Protokolls, gibt es Einschrankungen von

Losungswegen von Problemen. Dies fuhrt wiederum dazu, dass eine konkrete Losung

haufig in vielen Variationen, mit leichten Unterschieden vorliegt. Es ist naheliegend,

eine allgemein ausreichende und passende Losung zu verwenden, gegebenenfalls zu ad-

aptieren und das sprichwortliche Rad nicht neu zu erfinden. “Wiederverwendbarkeit ist

ein alter Traum der Softwaretechnik. Wo sie funktioniert, schafft sie bessere Qualitat

in kurzerer Zeit.” [Sch07]

1

Page 8: Evaluierung von PHP Frameworks

1.2 Die Skriptsprache PHP

Die im Jahre 1995 ins Leben gerufene, frei zugangliche Skriptsprache PHP, ist aktuell

mit Version 5.3 verfugbar. Ursprunglich wurde die bis heute in der Programmier-

sprache C verfasste Skriptsprache von Rasmus Lerdorf entwickelt, um eine Sammlung

von Skripten der Programmiersprache Perl, bei welcher es sich ebenfalls um eine frei

zugangliche Skriptsprache handelt, zu ersetzen[WiP10]. Die Softwareentwickler Andi

Gutman und Zeev Suraski entwickelten mit dieser Basis die Version PHP3, welche

erstmals eine starkere Verbreitung erfuhr. Aus diesem Fortschritt heraus grundeten

Gutman und Suraski die Firma Zend Technologies Ltd., die bis heute fuhrend hinter

der Entwicklung von PHP steht. Der Name leitet sich aus den beiden Grundervorna-

men Zeev und And i ab. Mit PHP Version 4 wurde die Skriptsprache Perl endgultig

in der Verbreitung im Bereich der Programmierung von dynamischen Webseiten uber-

holt. Hierzu fuhrte vor allem der schnellerer Einstieg in die Programmierung mit PHP

gegenuber Perl. Mit Sommer 2004 wurde, mit verbesserter Unterstutzung von objek-

torientierten Konzepten, die Version 5 veroffentlicht. Da die verschiedenen Versionen

von PHP große Unterschiede aufweisen, ist es ublich, die zugehorige Hauptversions-

nummer der Bezeichnung PHP anzuhangen. Die Einfachheit der Sprache verspricht

vor allem unerfahrenen Entwicklern schnelle Ergebnisse in einer Umsetzung. Konzepte

wie eine schwache Typisierung vereinfachen die schnelle Erzeugung kleiner Anwendun-

gen. In großen Systemen kann die nachlassige Verwendung von Typen eine potentielle

Fehlerquelle sein. Beispielhaft wird dies in Listing 1 dargestellt.

1 <?php var dump (

2 0 == nu l l , // boo l ( t r u e )

3 ’ 0 ’ == 0 , // boo l ( t r u e )

4 ’ 0 ’ == n u l l // boo l ( f a l s e )

5 ) ;

Listing 1: schwache Typisierung in PHP

1.3 Entwicklungsumgebung

Eine typische Umgebung fur PHP Anwendungen ist das Betriebssystem Linux, ein

Apache Webserver und eine MySQL Datenbank. Auch wenn viele PHP Frameworks

versprechen, dass sie unter verschiedenen Umgebungen fehlerfrei ausfuhrbar sind, wur-

2

Page 9: Evaluierung von PHP Frameworks

de in dieser Arbeit explizit die bereits angesprochene Konstellation von Linux, Apache

und MySQL berucksichtigt. Die Irrelevanz welches dieser Programme verwendet wird,

zeigt sich darin, dass die Framworks keine Abhangigkeiten hierzu vorweisen. Im Weite-

ren fallt die Entscheidung zu dieser Zusammenstellung, da sie wie auch PHP und alle

betrachteten Frameworks aus quelloffener Software besteht. Unterschiede fur den Ent-

wickler sind ebenfalls nicht gegeben, da PHP keine vom Betriebssystem oder Webserver

abhangigen Eigenheiten aufweist.

1.4 Zielsetzung

Die Zielsetzung eines Softwareentwicklers ist es, Ergebnisse zu optimieren. Dies erreicht

man mit effizienter und schneller Entwicklung kombiniert mit einem performanten und

stabilen Ergebnis. Diese Arbeit setzt sich zum Ziel, die Vorzuge von PHP Frameworks

aufzuzeigen und einen Uberblick uber aktuell relevante PHP Frameworks zu schaffen.

Zu jedem der gewahlten Frameworks ist eine Kurzbeschreibung der Besonderheiten

verfasst, wobei drei ausgewahlte Frameworks unter Kapitel 4 im Detail betrachtet

werden. Es handelt sich hierbei um symfony, Yii und das Zend Framework. Um prio-

risiert und gewichtet Kriterien zu einer Projektumsetzung mit Hilfe eines der drei

gewahlten Frameworks darzustellen, findet sich am Ende dieser Arbeit eine Entschei-

dungshilfe in Form einer Entscheidungsmatrix. Mit dem Gedanken fur jede Aufgabe

das richtige Werkzeug zu finden, kann mit einer Projektspezifikation ein Framework

gewahlt werden.

1.5 Warum ein PHP Framework verwenden?

“The idea behind a framework is to offer a design you can use across multiple ap-

plications. All applications have a number of basic things in common. A framework

is designed to provide a structure for those common elements (database interaction,

presentation layer, application logic) so you spend less time writing up database inter-

face code or presentation-layer interfaces and more time writing the application itself.”

[IBM10]

Das Prinzip der Wiederverwendbarkeit von Software ist eines der wesentlichen Kri-

terien. In [oEE90] ist dies wie folgt definiert. “reusability. The degree to which a

software module or other work product can be used in more than one computer pro-

3

Page 10: Evaluierung von PHP Frameworks

gram or software system.” Vor allem im wirtschaftlichen Sinne ist dies erstrebens-

wert, da somit ein weitaus effizienteres und okonomisches Arbeiten ermoglicht wird.

Neben einer Software Bibliothek, welche eine konkrete Funktion verfolgt, gibt es Soft-

ware Frameworks, die eher allgemeine Funktionalitat abdecken. “Das Framework als

Hauptprogramm ist der Rahmen. Es stellt Schnittstellen bereit, in die Benutzer ihre

eigenen Codeteile einhangen konnen. Das Framework wird gestartet und kann die indi-

viduellen Aspekte aufrufen. Ein Anwendungsprogramm, das eine Bibliothek nutzt, ruft

diese auf. Frameworks dagegen drehen den Spieß um und rufen ihrerseits die Codeteile

auf, die anwendungsspezifisch sind.” [Sch07] Weiters unterstutzt die Verwendung den

Entwickler durch eine vorgegebene Struktur und hilft ihm dabei, definierte Standards

einzuhalten. Durch diese Vorgabe kann ein weiterer Entwickler, der mit dem Frame-

work vertraut ist, die Umsetzung schneller verstehen und Anderungen selbststandig

ohne weitere Einschulung durchfuhren. Von der Erfahrung langjahriger PHP Entwick-

ler konnen unerfahrene Programmierer profitieren. Sie arbeiten in einer strukturierten

Umgebung, lernen aus Beispielen und mussen nicht erst selbst eine Basis fur Projekte

schaffen. Um wiederkehrende Aufgabenstellungen mit vorgefertigten Losungen zu ver-

wenden, folgt ein Framework dem Prinzip der Erweiterbarkeit. Die Realisierung erfolgt

uber Erweiterungen als Module, Extensions oder Plugins. Im Wesentlichen verfolgen

diese dasselbe Ziel, indem sie eine Funktionalitat implementieren, die ein konkretes

Problem verarbeitet. Erweiterungen werden meist nicht von den Frameworkentwick-

lern selbst entwickelt, sondern von einem mit der Funktionalitat vertrauten Program-

mierer. Dadurch profitiert “das Framework” vom Spezialwissen der Community.

1.6 Was erwarte ich mir von einem PHP Framework

Da ein Framework selbst die Basis einer Software darstellt, muss diese erhohten Anfor-

derungen gerecht werden. Ein PHP Framework sollte nachfolgende Kriterien erfullen.

• Qualitat, Stabilitat und Sicherheit - Da die zu entwickelnde Software auf einem

Framework beruht, sind Qualitat, Sicherheit und Stabilitat drei der wichtigsten

Kriterien. Ein umfangreiches und moglichst vollstandiges Testframework soll-

te dem Kern des PHP Framework selbst angefugt sein, um Entwicklungsfehler

moglichst fruh und moglichst schnell bestimmen zu konnen. Sicherheitslucken

in der Kernsoftware bedeuten ein hohes Risiko. Erfahrene Internetuser konnen

das Framework vieler Webseiten durch ihre wesentlichen Merkmale bestimmen.

4

Page 11: Evaluierung von PHP Frameworks

Wenn bereits Sicherheitslucken der Offentlichkeit bekannt sind, besteht die Ge-

fahr, dass einer dieser kundigen Besucher diese Lucke missbraucht. Durch eine

große Anzahl von Benutzern und einer weitlaufigen Verbreitung werden Fehler im

Kernsystem eher gefunden, somit tragt auch dies maßgeblich zur Verbesserung

eines Frameworks bei. Naturlich soll auch die am Framework entwickelte Soft-

ware gepruft werden, sofern die geeigneten Tools hierfur zur Verfugung stehen.

“quality. The degree to which a system component, or process meets specified

requirements.” [oEE90]

• Performance - Das Framework sollte die eigentliche Anwendung nicht merk-

bar beeinflussen, durch den großen Funktionsumfang ist dies aber nur schwer

durchfuhrbar. Neben der Optimierung des Kernquellcodes sind Caching Mecha-

nismen unabdingbar. Diese sind eine gunstige Alternative zum Hardwareupgrade

des verwendeten Webservers um eine Leistungssteigerung durchzufuhren. Hierbei

gibt es diverse Vorgehensweisen wie das Zusammenfassen von Quellcode Datei-

en oder das Zwischenspeichern von statischen Inhalten. Außerdem gibt es eine

Reihe von Erweiterungen fur PHP selbst, die automatisiert auf PHP angewendet

werden konnen. Unter die bekanntesten zahlen hier der Alternative PHP Cache,

kurz APC, Memcache, XCache und der eAccelerator von Zend. “performance.

The degree to which a system or component accomplishes its designated functions

within given constraints, such as speed, accuracy, or memory usage.” [oEE90]

• Aktualitat/Weiterentwicklung - Die Webentwicklung erweist sich als sehr schnell-

lebig. Fur Frameworkentwickler ist es notwendig, fur neue Moglichkeiten offen

zu sein und Trends zu verfolgen. Umstellungen im Framework, z.B. der Wechsel

einer im Kern integrierten Library, sollten erfolgen, wenn dies Verbesserungen

schafft. Wie bereits in Kapitel 1.2 erwahnt wurde, sind erst mit PHP5 wichtige

Konzepte der objektorientierten Programmierung in die Sprache aufgenommen

worden. In einigen PHP Frameworks wird eine Abwartskompatibilitat zu PHP4

beworben, da die Software auf Webservern mit PHP4 wie auch PHP5 verwendet

werden konnen. Diese Kompatibilitat kann naturlich nur erreicht werden, indem

auf PHP5 verzichtet wird. Implizit sind dadurch naturlich keine der Vorzuge von

PHP5, innerhalb des Quellcode des Framework, enthalten. Daruber hinaus kann

man eine vollige Uberarbeitung oder sogar eine Einstellung der Weiterentwick-

lung erwarten.

5

Page 12: Evaluierung von PHP Frameworks

• Funktionsumfang - Angebotene Funktionalitat ist nur sinnvoll, solange diese all-

gemeine Aufgaben erfullt und keine Spezialfalle abdeckt. Die Abgrenzung und

bedachte Auswahl stellt einen erhohten Stellenwert dar, da mehr Quellcode auch

zugleich Performance- und Qualitatsverlust mit sich bringt. Anders betrachtet,

ist es naturlich nicht sinnvoll, jede Aufgabe in Erweiterungen anzubieten. Kern-

funktionalitat ist klar erkennbar, sobald viele Erweiterungen haufige Abhangig-

keiten dazu entwickeln.

• Erweiterung - Entsteht ein Stuck Code, welches man gut in weiteren Projekten

wiederverwenden kann, so ist es notwendig, dies vom restlichen Code zu losen.

Hierfur werden innerhalb von Frameworks Erweiterungen angeboten. Bezeichnet

werden diese als Module, Extensions oder Plugins. Dadurch entsteht eine Er-

weiterbarkeit durch Dritte, eine durch die Community verfasste Ausweitung der

Funktionalitat. Die Erweiterungen stellen eine Moglichkeit dar, unabhangig von

der Kernsoftware neue Losungen fur diverse Aufgaben zu schaffen. “extenda-

bility. The ease with which a system or component can be modified to increase

its storage or functional capacity.” [oEE90]

• Unabhangigkeit/Flexibilitat - Uber PHP hinaus muss das Framework eine Schnitt-

stelle zu den weiteren Komponenten einer Webapplikation liefern. Die wichtigsten

sind hierbei Schnittstellen zu Datenbank, Javascript- und Template-Integration.

Seit Einfuhrung von PDO, den PHP Data Objects, ist es wesentlich einfacher

geworden, die haufigsten Datenbanken zur freien Auswahl in einer Applika-

tion anzubieten. “PDO aims to supply an uniformed API of common func-

tions for most relational databases. This greatly simplifies the PHP process

(through the package differences in a common API to support different databa-

se) development.”[CHLJ09] Wie in PHP gibt es auch in Javascript Frameworks,

die Webanwendung einfach integriert werden konnen. Eine Auswahl, welches Ja-

vascript Framework dies ist, sollte dem Entwickler freigestellt sein. “flexibility.

The ease with which a system or component can be modified for use in applica-

tions or environments other than those for which it was specifically designed.”

[oEE90]

• Dokumentation - Der erste Einstieg in das Framework sollte vor allem schnell

funktionieren und es sollte moglich sein, sich leicht eine Ubersicht schaffen zu

6

Page 13: Evaluierung von PHP Frameworks

konnen. Nur so kann man vorweg schon entscheiden, ob denn auch die richtige

Wahl getroffen wurde. Hierbei helfen oft verwendete Kurzanleitungen fur kleine

Webprojekte wie die Erstellung einer einfachen Blog Anwendung. Ist der erste

Schritt einmal gewagt, liegt ein hoher Stellenwert auf Umfang und Vollstandig-

keit der Dokumentation. Ahnlich einer FAQ Liste werden oft Sammlungen von

Tutorial oder How-To, fur Aufgaben, die wiederholt auftreten, erstellt. Innerhalb

von Dokumentationen werden diese als Cookbook bezeichnet, da die Analogie zu

einer Rezeptsammlung erkennbar ist.

7

Page 14: Evaluierung von PHP Frameworks

2 Grundlegende Konzepte

2.1 MVC Modell

“As a design pattern, MVC is common to split an application into separate layers

that can be analyzed, and sometimes implemented, separately. By decoupling models

and views, MVC helps to reduce the complexity in architectural design and to increase

flexibility and reuse of code.” [CHLJ09] Das Model-View-Controller Modell beschreibt

die strikte Trennung von Daten, Logik und Darstellung. Die Eigenschaft der Abtren-

nung dieser Bereiche kann man sich zu Nutzen machen, indem Datenbank-, PHP- und

Layoutentwickler im Idealfall parallel zueinander die Umsetzungen durchfuhren. Diese

strikte Trennung gibt einerseits einen variablen, doch andererseits auch sehr vorge-

gebenen Aufbau einer Applikation vor. Intuitiv fallt die Entscheidung, welchen Platz

eine beispielhafte Prozesslogik einnehmen muss. Abbildung 1 zeigt den Aufbau und

Verlauf eines HTTP-Request in einem MVC Modell. Die Kernlogik des Framework

entscheidet, welcher Controller zu wahlen ist und weist diesem die Anfrage zu. Jeder

Controller verfugt uber eine Reihe von Actions, eine die der Anfrage entsprechenden,

wird gewahlt und ausgefuhrt. In diesem Bereich erzeugt der Controller bei Bedarf eine

Verbindung zum Model, speichert oder fragt Daten ab. Der Controller wahlt abhangig

vom Verlauf seiner Abarbeitung einen View, ubergibt diesem etwaige Daten und fuhrt

diesen aus.

2.2 CRUD

Es gibt vier Aktionen, die in Bezug auf ein Model ausgefuhrt werden konnen: das Model

zu erstellen, Informationen zu lesen, das Model zu verandern und es zu loschen. Man

spricht von einem CRUD Modell. CRUD steht fur Create, Read, Update und Delete,

was auch den grundlegenden Datenbankoperationen entspricht. Typischerweise findet

dieses Modell Einzug bei automatischer Code Generierung. Erzeugt wird ein Model mit

den zur Kommunikation mit der Datenbank notwendigen Methoden. Ein Controller

mit der Verbindung zu diesem Model enthalt die vier Methoden des CRUD Modell.

Typischerweise werden Create und Update als Formular in einem View dargestellt. Der

View fur Read stellt die Informationen des Model in HTML dar. Fur die Ausfuhrung

von Delete ist nicht zwingend ein eigener View notig. Meist wird hier innerhalb des

Controller eine Weiterleitung zu einer anderen Action - wie einer Listenansicht des

8

Page 15: Evaluierung von PHP Frameworks

Abbildung 1: MVC Modell

Model - gewahlt.

2.3 Datenstrukturen

Die vorrangigste Struktur bei Datenbanken von Webapplikationen bildet das Entity-

Relation Model. Das Modell hat eine starke Verbindung zur objektorientierten Pro-

grammierung. Eine Tabelle speichert diverse Daten innerhalb der Tabellenspalten mit

Attributtyp Zahl, Text oder Datum. Das Abstrahieren ist denkbar einfach, ein Mo-

del ist eine Klasse dieser Tabelle, dessen Attribute die Tabellenspalten wiederspiegelt.

Die Relationen, die in Abbildung 2 dargestellt werden, konnen auf folgende Arten

eingeschrankt werden[QZ10]:

• 1..n oder One-to-Many Beziehung, bezeichnet die Relation zwischen zwei Tabel-

len. Beispielsweise sind einem Benutzer viele Eintrage zuzuordnen, in umgekehr-

ter Form jedoch besitzt jeder Eintrag genau einen Benutzer.

• 1..1 oder One-to-One Beziehung, stellt einen Spezialfall der One-to-Many Bezie-

hung dar. Hierbei haben beide Tabellen hochstens einen zugehorigen Eintrag in

9

Page 16: Evaluierung von PHP Frameworks

Abbildung 2: Entity-Relation Modell

Relation. Zum Beispiel hat ein Benutzer genau ein Benutzerprofil.

• n..m oder Many-to-Many Beziehung wird verwendet, wenn keine eindeutigen

Verbindungen zwischen zwei Tabellen vorhanden sind. Wenn ein Eintrag zu vie-

len Kategorien gehort und eine Kategorie jeweils wieder viele Eintrage haben

kann, dann wird eine Many-to-Many Beziehung benotigt. Dies kann man als

eine Verbindung von One-to-Many Beziehungen der beiden Tabellen uber eine

Zwischentabelle sehen. Eine Kategorie hat somit viele Eintrage, wie auch ein

Eintrag vielen Kategorien zugeordnet sein kann.

2.3.1 Object-Relational-Mapping

“In order to access the database in an object-oriented way, an interface translating the

object logic to the relational logic is required. This interface is called an object-relational

mapping, or ORM.” [ZP10] Ein Model stellt in diesem Zusammenhang eine einzelne

Datenbanktabelle dar. Die Attribute sind als Membervariablen verankert und uber die

jeweiligen Getter und Setter Methoden erreichbar.

2.3.2 Active Record Pattern

Active Record ist ein Spezialfall von ORM, bei dem die Tabellenattribute erst wahrend

der Laufzeit bestimmt werden. Somit ist es moglich, die Datenbank abzuandern, ohne

entsprechende Anpassungen im Quellcode vornehmen zu mussen. Der Performance

Verlust ist gering, nur beim ersten Zugriff auf das Model werden die Tabellen bzw.

10

Page 17: Evaluierung von PHP Frameworks

Modelinformationen ausgelesen. Dies bedeutet eine zusatzliche Datenbankabfrage pro

Model.

2.4 RAD

RAD steht fur Rapid Application Development und bezeichnet ein von Prototypen ge-

triebenes Entwicklungsmodell in der Softwareentwicklung. Durch Code Generierungen

sowie dem CRUD Modell wird dies begunstigt. Uber das Model wird bei der Generie-

rung ein vollstandiger und ausfuhrbar CRUD Pfad erstellt. Die entsprechenden Con-

troller und Views werden erzeugt. Der Entwickler kann auf dieser Vorlage die weitere

Funktionalitat nach und nach einarbeiten. Im RAD ist eine schrittweise Entwicklung

mit jeweiligen Prototypen ublich. So wird eine Applikation so lange entwickelt, bis

diese vom Kunden als abgenommen gilt.

11

Page 18: Evaluierung von PHP Frameworks

3 Ubersicht von bekannten PHP Frameworks

Als Grundlage fur eine objektive Zusammenstellung wird nach den in Kapitel 1.6

genannten Kriterien eine Recherche durchgefuhrt. Nachdem ein wesentlicher Faktor

eine große Verbreitung bzw. breite Community darstellt, konnen alle Frameworks,

die nicht mit einfachen Suchanfragen mit diversen Internet-Suchmaschinen gefunden

wurden, vorweg ausgeschlossen werden. Nachfolgend wird keine vollstandige Liste al-

ler verfugbaren PHP Frameworks aufgezeigt, jedoch liefert diese einen ausreichenden

Uberblick uber alle aktuell relevanten Frameworks.

3.1 Adventure PHP Framework (APF)

Das Framework bedient sich anerkannten objektorientierten Design-Pattern und bie-

tet bereits eine Vielzahl von Losungen fur bekannte Problemstellungen. Auf Tools zur

automatischen Code Generierung wird mit Absicht verzichtet, außerdem werden erwei-

terte Konfigurationen im Normalfall vermieden. Als Verbindung zu einer Datenbank

ist eine eigens entwickelte Object-Relational-Mapping Losung angeboten. Hierbei muss

der Entwickler fur jedes Model die Konfiguration einer INI-Datei vornehmen und des-

sen Datenstruktur dort abbilden. Uber diese Konfiguration abstrahiert das Framework

Zugriffe auf Daten. Quellcodes fur Model Klassen sind allerdings nicht mehr notwen-

dig. Das Framework stellt sich im deutschsprachigen Raum als bekannt heraus, ist

jedoch, durch die relativ kleine Community, eher mit Vorsicht zu verwenden.

Website: http://www.adventure-php-framework.org/

Aktuelle Version: 1.12

3.2 Akelos

Das Akelos Framework folgt dem Vorbild Ruby on Rails und versucht Features wie Ac-

tive Controller, Active View oder das Active Record Pattern auf PHP zu ubertragen.

Besondere Bedeutung findet hierbei die Datenbank Abstraktion mittels den Active

Records. Eine interessante Eigenheit ist die automatische Typerkennung von Attribu-

ten bei den Models. Diese erfolgt uber eine Konfigurationsdatei welche ein Datenbank

Schema abbildet und die Attributtypen uber den Attributnamen errat. Akelos bewirbt

das Feature mit der PHP Version 4 kombatibel zu sein. Hierbei sollte dem Entwickler

bewusst sein, mit PHP Version wohl auf ein altes Pferd zu setzen.

12

Page 19: Evaluierung von PHP Frameworks

Website: http://www.akelos.org/

Aktuelle Version: 1.0.1

3.3 CakePHP

Mit hohem Bekanntheitsgrad sowie großer Community, bietet CakePHP ein Frame-

work nach dem MVC Modell. In diesem Framework findet sich an einigen Stellen das

“Convention over Configuration” Prinzip wieder. Dieses soll dem Entwickler Konfigu-

rationsarbeit erleichtern, solange sich dieser an einige Konventionen halt. Zum Beispiel

konnte man auf die Zuordnung eines Model zur passenden Datenbanktabelle verzich-

ten, indem Tabellen- und Klassenname des Model die Konvention erfullen. Die Soft-

ware ist ebenfalls kombatibel zu PHP4. Die offizielle Dokumentation findet sich, den

Framework Namen sehr passend, in einem umfangreichen Cookbook wieder.

Website: http://www.cakephp.org/

Aktuelle Version: 1.3.3

3.4 Codeigniter

Besonders fur Einsteiger empfiehlt sich das Codeigniter Framework. Es bietet einen

schnellen Einstieg und ist im Umfang eher gering. Das Framework kann auch mit PHP4

verwendet werden, sodass auch altere Hostings verwendet werden konnen. Der geringe

Umfang spiegelt sich auch im Angebot der Funktionalitat wieder. Fur unerfahrene

Entwickler liefert diese Framework eine Moglichkeit zum einfachen Einstieg in die

Entwicklung von Webanwendungen, ohne aus einer Vielzahl von objektorientierten

Konzepten auswahlen zu mussen. Die offizielle Dokumentation ist, zum Nachteil des

Framework, schlecht strukturiert und durftig.

Website: http://www.codeigniter.com/

Aktuelle Version: 1.7.2

3.5 eZ Components

“Die eZ Components stellen ein Komponenten-basiertes Framework dar, dessen Ele-

mente auch unabhangig voneinander und in Kombination mit den Bibliotheken ande-

rer Anbieter nutzbar sind. Sie bilden damit eine Alternative etwa zum PEAR-Projekt.”

[WiE10] Der wohl großte Vorteil in der Verwendung dieses Framework ist die Tatsache,

13

Page 20: Evaluierung von PHP Frameworks

dass Komponenten, also gebundelte Funktionspakete auch vollstandig getrennt vonein-

ander verwendet werden konnen. Die Dokumentation bietet einen schnellen Einsteig,

ist vollstandig und sehr detailiert. eZ Components benotigt mindestens PHP in Versi-

on 5.2.1, eine durchaus akzeptable Aktualitat der Skriptsprache.

Website: http://www.ez.no/ezcomponents

Aktuelle Version: 2009.2.1

3.6 PHPDevShell

Auch wenn es auf den ersten Blick so aussieht, ist PHPDevShell kein Content-Management-

System, aber auch kein typisches Framework, das auf dem MVC Modell aufbaut. Ein

sehr umfangreicher Backend Bereich soll Konfigurationen und Interaktionen mit dem

Framework in grafischer Form unterstutzen. Das Framework zielt speziell auf klei-

ne Entwicklerteams ab. Außerdem muss ein zu entwickelndes Projekt den notwen-

digen Spielraum in den Spezifikationen mit sich bringen, um diversen Eigenheiten

adaptiert werden zu konnen. Ein bereits vorgegebener Administrationsbereich bietet

oft gebrauchte Features wie Benutzer-, Navigations- oder Templateverwaltung. Durch

diese Vorgaben eignet sich das Framework auch nur fur Administrator basierte Appli-

kationen. Die Dokumentation ist in einem Wiki gehalten, wenig umfangreich und wird

hauptsachlich durch Beispiele erklart.

Website: http://www.phpdevshell.org/

Aktuelle Version: 2.8.1

3.7 Prado

Prado stellt ein PHP Framework mit einem sehr großen Funktionsumfang dar. Der

Aufbau erfolgt uber Komponenten, die Abarbeitung ist Ereignis-basierend. Als Vorbild

dienten Borland Delphi und Microsoft ASP.NET, was Prado in der Verwendung auch

sehr deutlich von anderen Frameworks unterscheidet. Die ersten beiden Version des

Frameworks hatten noch einige fundamentale Probleme. Aus diesem Grund wurde

die aktuelle Version 3 vollig neu programmiert und kann nun auch fur stabile, große

Systeme verwendet werden. Eine Dokumentation fehlt der Software, sodass ein Einstieg

uber Tutorials und Screencasts erfolgen muss.

Website: http://pradosoft.com/

14

Page 21: Evaluierung von PHP Frameworks

Aktuelle Version: 3.1.7

3.8 Seagull

Bereits seit 2001 wird das Seagull Projekt vorangetrieben. Das sehr reife Framework

gewinnt durch seine Erfahrung, eine große Community und vielen Codebeispiele. Als

Altlast kann man die bis dato bestehende Kompatibilitat zu PHP 4 sehen, an einer

Version in PHP5 wird gearbeitet. Die Dokumentation ist sehr umfangreich und findet

sich in einem Wiki wieder.

Website: http://seagullproject.org/

Aktuelle Version: 0.6.7

3.9 symfony

Das von der franzosischen Webagentur Sensio Labs hergestellte System wurde entwor-

fen, um eine Basis fur eigene Entwicklungen zu schaffen. Spater wurde die Entscheidung

gefallt, das Framework der Offentlichkeit zuganglich zu machen. Dieser Schritt hatte ei-

ne außerst schnelle Verbreitung und ebenso zugige Weiterentwicklung zur Folge. Beson-

dere Bedeutung legt symfony auf eine Unabhangigkeit der verwendeten Komponenten.

Sogar die Datenbankabstraktion ist lose an das Framework gekoppelt. Außerdem sind

Teile des Frameworks auch als eigenstandige Komponenten verfugbar. Mit Dezember

2010 soll Version 2 veroffentlicht werden. Hierbei soll eine vollstandige Uberarbeitung

von symfony aus den bisherigen Erfahrungen der letzten vier Nebenversionen entste-

hen.

Website: http://www.symfony-project.org/

Aktuelle Version: 1.4

3.10 Trax

Wie bei vielen PHP Frameworks versucht PHPonTrax Konzepte des bekannten in der

Programmiersprache Ruby verfassten Framework Ruby on Rails zu ubertragen. Die

sehr geringe Dokumentation erschwert einen Einstieg und ist daher fur Einsteiger nicht

empfehlenswert. Die Verwendung empfiehlt sich fur Softwareentwickler, welche zuvor

bereits Webanwendungen in Ruby on Rails verfasst haben und noch keine Erfahrung

mit PHP vorweisen konnen.

15

Page 22: Evaluierung von PHP Frameworks

Website: http://www.phpontrax.com/

Aktuelle Version: 0.16.0

3.11 Yii

Einfach, effizient und erweiterbar sind die drei Schlagworte zu Yii, mit welchen sich das

Framework selbst beschreibt. Im Janner 2008 wurde der Grundstein von Qiang Xue,

einem ehemaligen Entwickler von Prado, siehe Kapitel 3.7, fur das noch recht junge

PHP Framework gelegt. Vorgegeben wird in Yii, jQuery als Javascript Framework so-

wie ein standardmaßiges Seitenlayout. Beides findet sich auch in diversen funktionalen

Komponenten, in Yii Widgets genannt, wieder. Einen schnellen Einstieg verspricht die

ubersichtliche und einfach gehaltene offizielle Dokumentation.

Website: http://www.yiiframework.com/

Aktuelle Version: 1.1

3.12 Zend

Das Zend Framework wird von der bereits in Kapitel 1.2 erwahnten Firma Zend Tech-

nologies Ltd entwickelt. Die Software kann als eine ungebundene Ansammlung an

Komponenten gesehen werden, was die Flexibilitat bedeutend erhoht. Daruber hinaus

stellt es im Gesamten ein vollwertiges Framework mit MVC Architektur dar. Eine

markante Auffalligkeit bei Zend Projekten sind die Namenskonventionen. Dateipfad,

Modul und Funktion einer Klasse bestimmen deren Benennung. “These conventions

define a pseudo-namespace mechanism for Zend Framework. Zend Framework will ad-

opt the PHP namespace feature when it becomes available and is feasible for our de-

velopers to use in their applications.” [ZEN10] Fur erste Schritte erhalt man auf der

offiziellen Webseite einen Quickstart Guide. Weiterfuhrend kann man - bezogen auf die

Aufgabenstellung - eine sehr umfangreiche Beschreibung zu einzelnen Themengebieten

einsehen.

Website: http://framework.zend.com/

Aktuelle Version: 1.10

16

Page 23: Evaluierung von PHP Frameworks

3.13 Zoop

Eine Besonderheit von Zoop ist eine Kapselung, die mit sogenannten Zonen umgesetzt

wurde. Dieser Workaround konnte von dem, bereits in PHP Version 5.3 enthaltenen,

neuen Konzept der Namespace abgelost werden. Weiters findet sich die Template En-

gine Smarty fest verankert im View von Zoop. Die Entwicklung von Zoop startete wie

auch bei dem Seagull Projekt aus Kapitel 3.8, im Jahr 2001. Fur Dezember 2010 ist

die Veroffentlichung einer uberarbeiteten Version 2 geplant, wobei diese die bisherige

Verwendung von PHP4 losen wird.

Website: http://www.zoopframework.com/

Aktuelle Version: 1.5

17

Page 24: Evaluierung von PHP Frameworks

4 Yii, symfony und das Zend Framework

Aus den in Kapitel 3 gelisteten Frameworks wurden Yii, symfony und das Zend Fra-

mework fur eine genauere Betrachtung ausgewahlt. Die Frameworks weisen deutliche

Unterschiede auf, sind in ihrem Aufbau ahnlich und bieten ausreichend Dokumentati-

on. Alle drei Projekte sind nach der MVC Architektur entwickelt, aus diesem Grund

erfolgt ein allgemeiner Vergleich, im Folgenden aufgeteilt in Model, View und Control-

ler.

4.1 Model

Im Falle eines Yii Framework wird die Erzeugung der Datenbank dem Entwickler auf-

erlegt. Nachdem die Struktur geschaffen und mogliche Erstdaten eingespielt wurden,

beginnt die eigentliche Umsetzung des entsprechenden Model. Abgeleitet wird dieses

direkt von der allgemeinen Klasse CActiveRecord, welches, wie der Name schon sagt,

die Funktionalitat des Active Record Patterns wiedergibt. Typische weitere Anpassun-

gen erfolgen mit Angabe zur Regelung der Validierung, Relationen sowie der allgemei-

nen Bezeichnung von Attributen. Diese Adaptionen sind optional, da die Attribute,

der aktuelle Aufbau der Datenbank Tabelle zu Laufzeit bei der ersten Verwendung des

Model eingeholt werden. Durch erweiterte Konfiguration entsteht somit lediglich ein

Komfort, welcher bei weiteren Features des Framework, z.B. Formulardarstellung auf

Basis der Modeldefinition, genutzt wird.

Das symfony Framework setzt bei Datenbankverwendung auf Doctrine, eine Bi-

bliothek zur Datenbank Abstrahierung. Hierbei kann die Datenbankstruktur aus einer

XML oder YAML Schema Defintion generiert werden. Es besteht ebenfalls die Moglich-

keit, diese Schema Definitionen aus einer vorgegebenen Datenstruktur zu generieren.

Der Vorteil ist hier ganz klar fur Entwickler gegeben, die keine Erfahrungen mit der Er-

zeugung von Datenbanken aufweisen konnen. Dem Entwickler wird nach erfolgreicher

Ausfuhrung des Prozesses zur Erzeugung der Datenbank eine Umgebung generiert,

die bereits funktionstuchtige Models zu den Datenbanktabellen enthalt. Der Aufbau

erfolgt in hochster Ebene uber zwei Klassen. Eine Klasse dient zur direkten Reprasen-

tation des Model, eine Klassse zur Darstellung der Tabelle. Ersteres wird instanziert

um konkret als Model verwendet zu werden. Die Tabellenklasse bietet Methoden zum

Auffinden der Daten und liefert Instanzen der vorher beschriebenen Klasse zuruck.

18

Page 25: Evaluierung von PHP Frameworks

Die Entwicklung des Model erfolgt im Zend Framework ohne vorgenerierten Code.

Das Model wird von der Klasse Zend Db Table Abstract, welche ein objekt-orientiertes

Interface zur Datenbank Tabelle enthalt, abgeleitet. Diese stellt allgemeine Methoden

zur Datenverwaltung im CRUD Modell zur Verfugung, allerdings halten sich diese

sehr beschrankt in ihrer Funktion. Jegliche Erweiterung obliegt dem Entwickler, dies

birgt einerseits mehr Zeitaufwand, verringert jedoch Funktionalitat des Model auf die

tatsachlich benotigte.

4.1.1 Beispielcode

Listing 2 zeigt einen praktischen Vergleich der Ausfuhrung eines Datenerhalt uber ein

Model.

1 <?php

2 // Y i i Model User ( u s i n g i n t e r n a l CAct iveRecord )

3 $u s e r=User : : model ( )

4 −> f i n d ( ’LOWER(name)=? ’ ,

5 array ( CHttpRequest : : getQuery ( ’ name ’ , ’ gue s t ’ ) )

6 ) ;

7

8 // symfony Model User ( u s i n g component Doc t r i n e )

9 $u s e r = Doc t r i n e : : ge tTab l e ( ’ User ’)−>findOneByName (

10 $ t h i s−>ge tReques t ()−>getParamete r ( ’ name ’ , ’ gue s t ’ )

11 ) ;

12

13 // Zend Model User

14 $usermapper = new App l i ca t i on Mode l Use rMappe r ( ) ;

15 $u s e r = new App l i c a t i o n Mode l U s e r ( ) ;

16 $usermapper−>f i ndOneByLabe l (

17 $ t h i s−>ge tReques t ()−>getParam ( ’ name ’ , ’ gue s t ’ ) ,

18 $u s e r

19 ) ;

Listing 2: Model im Vergleich

19

Page 26: Evaluierung von PHP Frameworks

4.1.2 Zusammenfassung

Ubersichtlich betrachtet, bekommt man mit Yii eine schnelle und einfache Moglichkeit

Daten zu verwalten, bei der eine Konfiguration kaum notwendig ist. Die Tabellenat-

tribute werden wahrend der Laufzeit im Model vermerkt. Vollig gegensatzlich passiert

die Erzeugung von Models in symfony uber die Beschreibung der Datenstruktur in

einer Datei im Format XML, oder dessen gleichwertigen Kurzform YAML. Ein Vorteil

hierbei ist die Ubersichtlichkeit der Models und Relationen sowie die Moglichkeit, die

Datenbank selbst direkt uber das angelegte Schema zu erzeugen. Spezialfalle konnen

sich schnell zu einer Herausforderung entwickeln. Viel Eigenarbeit verspricht das Zend

Framework. Es wird lediglich die Erstellung einer Basisklasse ohne jegliche Methoden

unterstutzt. Die Datenbank Erzeugung sowie die vollstandige Anpassung des Model

erfolgen vom Entwickler ohne weitere Hilfe des Framework. Dies benotigt einiges an

Mehraufwand, verspricht jedoch eine Aufgaben orientierte Losung.

4.2 View

Out-of-the-box liefert Yii ein vorgefertigtes Layout, welches auch in vielen Widgets,

den Erweiterungen von Yii, enthaltenen ist. Je Controller kann festgelegt werden,

ob beispielsweise ein einspaltiges oder zweispaltiges Layout verwendet werden soll.

Keineswegs ist diese Konfiguration vorgegeben, sondern dient eher als Beispiel, wie

die Layout Erzeugung in Yii verwaltet werden kann. Bei anderer Verwendung muss es

jedoch erst aus den einzelnen Teilen entfernt werden. Um kleine Layoutstucke in Views

einzubinden, kann auf sogenannte Partials zuruckgegriffen werden. Diese vereinfachten

kleinen Views enthalten eine konkrete Darstellung, welche in verschiedenen Bereichen

wiederverwendet werden kann. So kann man die Darstellungsvorgabe der Kurzfassung

eines News-Beitrags in einem Partial beschreiben und dieses einerseits in der News

Listenansicht, andererseits in einer Sidebar auf anderen Seiten integrieren. Oft ist

ein Partial alleine unzureichend, da eine zugehorige Funktionalitat ausgefuhrt werden

muss. Zu diesem Zweck sind in Yii sogenannte Widgets eingefuhrt. Sie erweitern ein

Partial um die Abarbeitung einer Logik.

In symfony werden generelle Templates festgelegt, der Inhalt der eigentlichen Views

ist in der Variablen $sf content enthalten und wird an der entsprechenden Stelle im

Layout ausgegeben. Die Views selbst sind in den Modulen gespeichert. Mit einer geson-

derten Konfiguration kann jeder View einfachen Rahmenbedingungen angepasst wer-

20

Page 27: Evaluierung von PHP Frameworks

den. Das Prinzip der Partials ist auch in symfony enthalten. Ein durch Funktionalitat

erweitertes Partial bezeichnet ein Component. Diese werden zwar ahnlich wie Actions

definiert, jedoch werden sie indirekt uber die Integration in einem View ausgefuhrt.

Slots sind ein weiteres Konzept innerhalb der Prasentationslogik von symfony. Ein Be-

reich innerhalb des Haupttemplate muss mit einem eindeutigem Bezeichner versehen

werden. Dieser Bereich definiert einen Slot und kann nun aus jedem View angesprochen

und befullt werden.

Innerhalb des Zend Framework werden Layout und View getrennt behandelt, die

Verarbeitung erfolgt beiderseits wiederum in einem Template mit HTML und PHP

Elementen. Es ist kein strikter Aufbau der View Architektur vorgegeben, eine emp-

fohlene Vorgehensweise findet sich jedoch in den offiziellen Einfuhrungen.

4.2.1 Zusammenfassung

Eine Applikation ohne Layout Vorstellungen profitiert von dem vorgefertigten Stan-

dard Layout von Yii. Bei einem vorgegebenen Layout muss das Standard Layout jedoch

erst an vielen Stellen entfernt bzw. uberschrieben werden. Dadurch entsteht ein deut-

licher Mehraufwand. Partials, Components und Slots liefern dem symfony Framework

eine Modularitat und Wiederverwendbarkeit innerhalb der Prasentationslogik. Eine

zusatzliche Konfiguration verspricht einfache und schnelle Anpassungen. Dem Zend

Framework steht abermals mehr Flexibilitat, jedoch auch ein erhohter Entwicklungs-

aufwand gegenuber.

4.3 Controller

Die Abarbeitung der Kontrolllogik unterscheidet sich innerhalb Yii, symfony und Zend

nicht wesentlich. Eine vom Basis Controller abgeleitete Klasse steuert die gespeicher-

ten Actions. Die Wahl des Controllers basiert auf der Route des HTTP-Request. Diese

kann in den Konfigurationen abgeandert werden. So ist es einfach, eine Standard Action

festzulegen. Ein typisches Beispiel sei folgendes. Ein Controller ermoglicht den Infor-

mationszugriff auf Filme, die entsprechende Liste oder Ubersichtseite, entspricht der

Route http://www.example.com/index.php/movie/index. Einfache Konfigurationen,

mit Unterstutzung der URL-Rewrite Technik des Webservers, erlauben eine Anpas-

sung der dargestellten Route. Im genannten Beispiel konnte dies zu einer gewunschten

21

Page 28: Evaluierung von PHP Frameworks

Route wie http://www.example.com/movies.html fuhren. Diese ist sowohl fur den Be-

sucher als auch fur Suchmaschinen aussagekraftig und lesbar.

4.3.1 Zusammenfassung

In allen drei Frameworks erfolgt die Ausfuhrung der Kontrolllogik in sehr ahnlicher

Weise. Der HTTP Request wird mit speziellen Parametern festgelegt, welche die aus-

zufuhrenden Controller und Action eindeutig wiedergeben. Innerhalb der Action wird

samtliche Prozesslogik ausgefuhrt, bei Bedarf Daten via Models eingeholt und diese

an den View ubergeben.

4.4 Komponenten eines Framework

4.4.1 Formular und Formularvalidierung

Die Argumenten Ubergabe einer HTTP Anfrage erfolgt in PHP meist uber die HTTP-

Request Methoden POST oder GET. Die GET Parameter sind fur den Besucher in

der URL erkennbar und werden lediglich mittels URL-Rewrite noch dekoriert. Ein

typischer GET Aufruf zielt darauf ab, Informationen zu erhalten. POST wiederum

sendet Informationen an eine Webseite, die vom System verarbeitet werden sollen. Die

Informationen werden nicht innerhalb der URL ausgegeben. Das Konzept von HTML

Formularen unterstutzt diese Vorgehensweise mit den notwendigen darstellbaren Ele-

menten.

Yii liefert mit der Klasse CHtml ein Sammlung von haufigen HTML Elementen,

darunter auch Formelemente. Diese lassen sich bequem uber ActiveForm Elemente

mit einem Model verbinden. Die Validierung ist hierbei innerhalb des Model definiert,

sodass weder Controller noch View mit weiterer Logik erganzt werden mussen.

Innerhalb von symfony gibt es ein ahnliches Konstrukt mit Namen sfForm. Hierbei

werden neben Models auch Formklassen generiert. Uber diese kann man ein konkretes

Formular erzeugen, welches im View direkt ausgegeben werden kann. Die Definition

der Validierung erfolgt hierbei nicht im Model, sondern direkt in der speziellen Form

Klasse.

Eine umfangreiche Komponenten liefert Zend Form und vereinfacht die Erzeugung

von Formularen in Webanwendungen. Zur Uberprufung von Eingabedaten kann die

Komponente Zend Validate herangezogen werden.

22

Page 29: Evaluierung von PHP Frameworks

4.4.2 Internationalisierung und Lokalisierung

Nach dem Prinzip der Internationalisierung kann eine Webapplikation so entwickelt

werden, dass die Darstellung fur den Besucher in verschiedenen Sprachen aufbereitet

werden kann, ohne Anderungen an der Umsetzung vornehmen zu mussen. Lokalisie-

rung entspricht demselben Prinzip, jedoch zielt dies auf die Formatierung von Dar-

stellungen wie eines Datum oder einer Nummer vor. Die gebrauchliche Kurzform fur

Internationalisierung ist i18n, fur Lokalisierung i10n. Das MVC Modell liefert einen

besonderen Vorteil. Nach Konvention sind alle anzuzeigende Texte innerhalb der Dar-

stellungslogik, dem View enthalten. Naturlich konnen auch gespeicherte Daten in ver-

schiedene Sprachen vorliegen. Die Verarbeitung erfolgt in diesem Fall uber das Model.

Das Yii Framework bietet fur die Ubersetzung innerhalb des View eine allgemein

zugangliche Methode. Die Ubersetzungen selbst werden in einfachen Textdateien hin-

terlegt. Fur die Lokalisierung stehen einige Helfer-Klassen zur Verfugung, die bei Be-

darf geladen werden konnen.

Innerhalb von symfony sowie im Zend Framework ist ein sehr ahnlicher Aufbau zu

verzeichnen. Uber Helfer-Methoden werden Texte und Formatierungen umgewandelt,

die Ubersetzungen sind in Text-Dateien gespeichert. Zusatzlich wird in symfony die

Mehrsprachigkeit von Datenhaltung in der Datenbank berucksichtigt.

4.4.3 Caching

“One of the ways to speed up an application is to store chunks of generated HTML

code, or even full pages for future requests. This technique is known as caching [. . . ]”

[ZP10] Bevor ein Controller die Ausfuhrung einer Action veranlasst, sucht dieser nach

der bereits zuvor generierten Darstellung. Wird ein entsprechender HTML Code ge-

funden, so ersetzt dieser die Ausfuhrung der Action. Die Antwort kann schneller an

den Benutzer erfolgen und der Webserver wird durch die gesparte Rechenarbeit ent-

lastet. Der Cache, also die bereits vorgefertigten HTML Stucke, werden in Dateien,

der Datenbank oder auch im Arbeitsspeicher des Webserver gespeichert. Neben dieser

Methode werden meist auch Konfigurationen zusammengefasst.

Yii unterscheidet zwischen Daten, Fragment und Page Caching. Beim Daten Caching

konnen Informationen an eine Cache Komponente ubergeben und uber eine eindeu-

tig vergebene Identifikation auch wieder abgeholt werden. Innerhalb des View konnen

uber den Fragment Cache Inhaltselemente festgelegt werden, die nicht bei jedem Auf-

23

Page 30: Evaluierung von PHP Frameworks

ruf ausgefuhrt werden mussen. Die Verwaltung der Speicherung fuhrt das Framework

selbst durch. Die Zwischenspeicherung einer gesamten Webseite erfolgt uber den Page

Cache. Dieser kann im Controller konfiguriert werden und bedarf keiner weiteren An-

passungen. Zu allen Cache Typen kann man eine Lebensdauer, also einen Zeitrahmen,

oder andere Rahmenbedingung zur Gultigkeit festlegen.

Das symfony Framework bietet zu den Komponenten des View Modell einen Ca-

ching Mechanismus. Eine Action, ein Partial, ein Component oder ein Slot konnen zur

Zwischenspeicherung zugewiesen werden. Dies erfolgt in einer exklusiv dafur vorgese-

henen Konfiguration. Auch eine Fragment Caching findet sich in symfony wieder. Wie

auch schon bei Yii wird dieser direkt im View angegeben.

Im Zend Framework bietet mit Zend Cache eine Komponente, um Caching Mecha-

nismen in einer Webapplikation zu integrieren. Die Zwischenspeicherung erfolgt, wie

bereits bei Yii kennengelernt, uber eine Identifikation mit zusatzlich definierter Le-

bensdauer. In der offiziellen Dokumentation findet sich ein ausreichende Einfuhrung

zur Erstellung einer Caching Umgebung, eine vorgefertigte Losung gibt es von Seiten

Zend jedoch nicht.

4.4.4 Testen

Fur eine komplexe Anwendungen, oder Applikationen denen eine hohe Stabilitat oder

Sicherheit abverlangt wird sind automatisierte Tests notwendig. “Automatisierter Test

bedeutet, dass die Testfalle mit Hilfe eines Werkzeugs und ohne weiteres Zutun eines

menschlichen Testers aufgerufen, durchgefuhrt und mit den Sollergebnissen verglichen

werden. Die hohe Forderung, alle unit tests standig durchzufuhren, ist ohne Automa-

tisierung nicht zu erfullen.” [Sch07] Man unterscheidet zwischen Modul und System

Test. Bei einem Modultest wird eine separiert ausfuhrbare Funktionalitat, wie bei-

spielsweise eine Methode, auf ein korrektes Ergebnis gepruft. Die Vorgehensweise ist

so, dass moglichste viele und unterschiedliche Eingaben mit den korrespondierend rich-

tigen Ausgaben verglichen werden. Haufig wird fur Modultest auch die englische Be-

zeichnung Unit-Test verwendet. Die zweite, gelaufige Vorgehensweise sind ein System

oder auch Funktions Test. Vergleichbar sind diese mit aus der Modellierung bekannten

Use-Cases, einer schematischen Darstellung eines Ablaufs. Nachdem Webapplikationen

vorwiegend in Internet Browsern aufgerufen werden, passiert die Ausfuhrung eines Test

auch automatisiert in einem simulierten Browser. Getestet werden einzelne Aktionen,

24

Page 31: Evaluierung von PHP Frameworks

die mit der Anwendung durchfuhrbar sind. Eine vollstandige Abdeckung ist in diesem

Fall nicht das Ziel, meist auch gar nicht durchfuhrbar. Wichtig ist jedoch das Testen der

Hauptfunktionalitat sowie weiterer kritischer Sicherheitsbereiche wie Benutzer Login

oder mit Benutzerrechten versehene Bereiche. Ist erstmals eine Basis an Tests geschaf-

fen, so kann nach jeder Neuerung eine Ausfuhrung dieser erfolgen. Auf diesem Weg

sind Fehler in komplexen Abhangigkeiten leichter zu aufzufinden. Neben der Moglich-

keit, mit Hilfe von Tests die Sicherheit und Stabilitat eines Webprojekt zu erhohen, ist

es auch eine gute Losung, als Vorgehensmodell eine Test-getriebene Entwicklung zu

wahlen. Eine Teilspezifikation wird gewahlt, die entsprechenden Tests eingepflegt. Bei

der Ausfuhrung der automatisierten Uberprufung schlagen diese fehl. Dem Program-

mierer stellt sich nun die Aufgabe, den Sourcecode dahingehend zu entwickeln, dass

alle Test erfolgreich durchlaufen werden.

Mit der Generierung von Models liefert Yii automatisch ein Rohgerust von Klassen

fur Modul- wie auch Funktionstests. Diese sind dem Model entsprechend aufgebaut und

konnen als Vorlage direkt verwendet werden. Modultests werden uber PHPUnit, ein

in der Programmbibliothek PEAR frei verfugbaren Testframework, durchgefuhrt, fur

funktionale Tests wird Selenium, ein automatisiertes Testframework, das mit Hilfe von

Javascript am Betriebssystem installierte Browser simuliert, angeboten. PHPUnit und

Selenium sind im Framework nicht enthalten, die Installation obliegt dem Entwickler.

Fur Modultest wurde in symfony eine eigene Umgebung mit Namen Lime geschaffen.

Beabsichtigt wurde eine verbesserte Lesbarkeit sowie eine unabhangige Testumgebung.

Die Verwendung und Ausfuhrung passiert analog zu dem in Yii verwendeten PHPU-

nit Framework. Auch fur die simulierte Ausfuhrung in einem Webbrowser wurde eine

eigene Applikation erzeugt. Uber die sfBrowser PHP Klasse kann ein Umgebung er-

zeugt und mit dessen Methoden eine Ausfuhrung nachgespielt werden. Der Nachteil

an der Ausfuhrung in dieser Variante ist, dass kein Client-Seitiger Code wie Javascript

ausgefuhrt werden kann. Hierzu empfiehlt smfony ebenfalls selenium. “The solution is

called Selenium, which is a test framework written entirely in JavaScript. It executes a

set of actions on a page just like a regular user would, using the current browser win-

dow. The advantage over the sfBrowser object is that Selenium is capable of executing

JavaScript in a page, so you can test even Ajax interactions with it” [ZP10]

Das Zend Framework beschrankt sich auf Modultest und leitet diese von PHPUnit

ab. Erweitert wird dies noch mit einer vereinfachten Moglichkeit zur Benutzung von

25

Page 32: Evaluierung von PHP Frameworks

Testdatenbanken. Funktionale Test finden im Zend Framework keinen Einzug. Eine

Verwendung von Selenium, wie in den Beispielen zuvor, ist naturlich moglich, im Zend

Framework jedoch nicht out-of-the-box vorgesehen.

4.4.5 Sicherheit

Die Frameworks symfony und Yii unterstreichen in ihren Dokumentationen bereits

die Wichtigkeit von Tests besonders. Unterstutzt wird dies noch davon, dass bei der

automatisierten Generierung der Models auch die zugehorigen Rohgeruste zum Tes-

ten erzeugt werden. Neben den Testen gibt es eine Reihe von Techniken, um Sicher-

heitslucken vorzubeugen, zwei davon werden nachfolgend diskutiert.

So beschreibt Output Escaping eine Strategie, durch Benutzer erfolgte Eingaben

so aufzubereiten, dass dieser keinen Schadcode einschleusen kann. Das Prinzip der

Nutzung einer Sicherheitslucke bei der Ausgabe bzw. auch Ausfuhrung von benut-

zergenerierten Code nennt man Cross-Site Scripting oder auch XSS. Konkret wird

jeglicher von Benutzern gespeicherter und erzeugter Inhalt einer Webapplikation bei

der Ausgabe gefiltert, sodass vorweg Zeichen, die zum HTML Zeichensatz gehoren in

entsprechende Sonderzeichen umgewandelt werden. Yii wie auch das Zend Framework

bieten hierzu eine Methode, die auf den auszugebenden Inhalt angewendet werden

kann. In symfony kann Output Escaping konfiguriert werden, sodass samtliche an den

View gelieferten Daten bereits von potentiellem Schadcode entfernt wurden.

Eine ahnliche Vorgehensweise erzeugen SQL Injections. Parameter eines HTTP-

Request, welche bei der Erzeugung von dynamischen Webseiten notwendig sind, wer-

den vom Angreifer so abgeandert, dass dieser in die Kommunikation zur Datenbank

eingreifen kann. Beispielsweise kann dieser so Benutzerlogins umgehen oder sensible

Daten aus der Datenbank auslesen. Jeweils Yii, symfony und das Zend Framework

setzen dem Software Entwickler eine Schnittstelle zur Datenbank vor, sodass dieser

bei korrekter Verwendung keine weitere Vorsicht walten lassen muss.

4.4.6 Dokumentation

Aller Einstieg ist schwer, zumindest ohne das Vorliegen einer guten Dokumentation.

Der Vergleich scheint hier denkbar einfach uber die verfugbaren Lernmethoden. Auf

der Website von Yii werden lediglich zwei Tutorials, eine allgemeine Einfuhrung, eine

Cookbook Sammlung, zwei Screencasts sowie Cheatsheets angeboten. Der Umfang

26

Page 33: Evaluierung von PHP Frameworks

dieser Dokumentation ist auf den ersten Blick sehr sparlich, liefert jedoch einen guten

und strukturierten Einblick in das Framework und in vielen Bereichen auch daruber

hinaus. Das erste Buch zu Yii wurde wahrend bzw. kurz vor Abschluss dieser Arbeit

veroffentlicht.

Die franzosische Firma Sensio Labs, Hauptentwickler von symfony, liefert eine Reihe

von Buchern, die auf symfony abgestimmt sind. Diese sind auf der offiziellen Websei-

te auch als kostenlose Druckversion verfugbar. Neben diesen gibt es, durch die sehr

große Community, eine Vielzahl an How-Tos und Tutorials. Als zusatzlichen Bonus

veroffentlicht symfony jedes Jahr zur Weihnachtszeit eine 24 Stunden Dokumentation,

aufgeteilt auf eine Stunde pro Tag, zur Umsetzung einer praktischen Webseite.

Mit uber 1000 Seiten wird der Programmer’s Reference Guide, das offizielle Hand-

buch fur Entwickler, von der Firma Zend Technologies Ltd. beworben. Ein vollstandige

Ubersetzung liegt in Deutsch, Franzosisch, Japanisch, Russisch und Chinesisch vor.

Multimedial werden Podcasts, abonnierbare Mediendaten und Webinars, sowie Semi-

nare uber das World Wide Web angeboten. Daruber hinaus gibt es von der Entwick-

lungsfirma angebotene Trainings, Consultings und Zertifizierungen.

27

Page 34: Evaluierung von PHP Frameworks

5 Zusammenfassung und Ausblick

Die in Kapitel 4 gepruften Frameworks sind eine gute Basis fur Webapplikationen. Aus

den Kriterien in Kapitel 1.6 ergibt sich eine zufriedenstellendes Ergebnis. Qualitat, und

Stabilitat bieten die Frameworks uber Tests, siehe Kapitel 4.4.4, und liefern auch Vor-

gaben um gute Sicherheit in einem Web Projekt zu erzeugen. Das junge Framework

Yii ist in seiner Verbreitung noch relativ klein, uberzeugt aber durch die verwendeten

Konzepte. Die Performance wird bei Yii meist besonders hervorgehoben. Diese wird

zusatzlich mit den in Kapitel 4.4.3 angesprochenen Cache Methoden unterstutzt. Zend

und symfony haben Ihre Komponenten lose an das Framework gekoppelt, sodass diese

auch ohne dem Framework selbst in einem Web Projekt eingebunden werden konnen.

Dies liefert den Frameworks eine bedeutende Unabhangigkeit sowie auch Flexibilitat.

Yii hat vordefinierte Abhangigkeiten, die erst durch entsprechende Konfigurationen

ausgeblendet werden. Außerst umfangreich zeigen sich die Dokumentation, der Funk-

tionsumfang sowie die Erweiterung.

Durch die bereits mehrmals angesprochene kleine Community des Yii Framework,

der eher geringen Anzahl an Erweiterungen sowie Abhangigkeiten innerhalb der Soft-

ware, eignet sich das Framework nicht fur große Webapplikationen. In der Umsetzung

von kleinen Projekten wiederum bietet Yii einige Vorteile - wie ein vorgefertigtes Lay-

out und funktionsbereiten Teilstucken.

Mit einer bedeutenden Verbreitung ist symfony ein ideales Werkzeug, um mittlere

bis große Webapplikationen zu erzeugen. Fur kleinere Web Projekte ist der anfangliche

Aufwand bis zur Basis einer Applikation wohl nicht rentabel.

Fur erfahrene PHP Entwickler ist das Zend Framework die beste Wahl fur ein Pro-

jekt. Die Hauptarbeit liegt in der Umsetzung mit PHP und weniger mit der Konfigu-

ration oder Adaption eines Frameworks.

Alle drei Frameworks setzen auf aktuelle Konzepte von modernen PHP Software

Frameworks, erfullen so auch die Anforderung an Aktualitat.

Mit Veroffentlichung des ersten Buches, einer Einfuhrung in das Yii Framework mit

Titel “Agile Web Application Development with Yii1.1 and PHP5” ist ein guter Schritt

getan, neue Entwickler fur Yii zu begeistern, sodass auch eine Weiterentwicklung vor-

angetrieben wird.

Mit Dezember 2010 wird die Veroffentlichung von symfony 2.0 erwartet. Eine verbes-

serte Performance sowie Anpassungen in der Struktur sind geplant. Mit der aktuellen

28

Page 35: Evaluierung von PHP Frameworks

umfangreichen Verbreitung von symfony ist eine schnell Weiterentwicklung vorgege-

ben.

Das Zend Framework mit der Firma Zend Technologies Ltd. als Hauptentwickler von

PHP liefert dadurch wohl auch einen uberlegenen Vorteil gegenuber anderer Frame-

works. Die Weiterentwicklung scheint vorerst mit der Entwicklung von PHP garantiert.

Ausserdem sind neue Konzepte der Skriptsprache PHP schnell innerhalb des Frame-

work zu finden.

Ob als Einstiegshilfe fur unerfahrene Entwickler und einfachen Webseiten, oder

Grundstruktur komplexer Webanwendungen von langjahrigen PHP Entwicklerteams,

ein PHP Framework ist ein ideales Werkzeug um mehr Effizienz in einer Umsetzung

zu erfahren.

29

Page 36: Evaluierung von PHP Frameworks

6 Anhang A - Entscheidungsmatrix

Die Verwendung erfolgt indem in die außere Spalte die prozentuale Gewichtung der

Projekteigenschaften ausgefullt wird. Die Summe der Gewichtungen ergibt 100%. Ei-

genschaften ohne Relevanz werden mit 0% versehen. Sobald dies erfolgt ist, werden

die einzelnen Werte-Felder angewendet auf den entsprechenden Prozentsatz der Zeile,

je PHP Framework summiert. Das Ergebnis wird in die letzte Zeile geschrieben und

verglichen. Ein moglichst niedriger Wert entspricht einer gunstigen Verwendung des

Framework.

Yii symfony Zend Relevanz in %

Erfahrung des Entwicklerteam 2 2 1

Schneller Einstieg 1 2 3

Umfangreiches Projekt 3 2 1

Kleines Projekt 1 3 3

Einmalige Entwicklung 1 2 3

Fortwahrende Entwicklung 3 2 1

Schnelle Ergebnisse, Prototyping 1 2 3

Genaue Layoutvorgaben 2 1 1

Verwendung von Bibliotheken 2 1 1

Anforderung Performance 1 2 2

Anforderung Sicherheit 2 1 1

Anforderung Stabilitat 1 1 2

Große Datenstrukturen 3 2 1

Komplexe Datenstrukturen 2 1 2

Summe 100%

30

Page 37: Evaluierung von PHP Frameworks

Abbildungsverzeichnis

1 MVC Modell, Quelle: [ZP10] . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Entity-Relation Modell, Quelle: [QZ10] . . . . . . . . . . . . . . . . . . 10

Literatur

[CHLJ09] Wei Cui, Lin Huang, LiJing Liang, and Li Jing. The research of php deve-

lopment framework based on mvc pattern. 2009.

[IBM10] Php frameworks. 2010. http://www.ibm.com/developerworks/

opensource/library/os-php-fwk1/ (25.07.2010).

[oEE90] The Institute of Electrical and Electronics Engineers. Iee standard glossary

of software engineering terminology. 1990.

[QZ10] Xue Qiang and Xiang Wei Zhuo. The definitive guide to yii 1.1. 2010.

[Sch07] Kurt Schneider. Abenteuer Softwarequalitat. 2007.

[WiE10] ez publish. 2010. http://de.wikipedia.org/wiki/EZ_Publish#eZ_

Components (25.07.2010).

[WiP10] Php. 2010. http://de.wikipedia.org/wiki/PHP (24.11.2010).

[ZEN10] Programmers reference guide. 2010. http://framework.zend.com/

manual/en/coding-standard.naming-conventions.html (08.08.2010).

[ZP10] Francois Zaninotto and Fabien Potencier. A Gentle Introduction to symfony.

2010.

31