Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Frank Dopatka PHP – Endlich objektorientiert OO- und UML-Praxisbuch: vom Anfänger zum Fortgeschrittenen Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Frank Dopatka PHP – Endlich objektorientiert OO- und UML-Praxisbuch: vom Anfänger zum Fortgeschrittenen Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Frank Dopatka PHP – Endlich objektorientiert OO- und UML-Praxisbuch: vom Anfänger zum Fortgeschrittenen ISBN: 978-3-86802-039-7 © 2010 entwickler.press Ein Imprint der Software & Support Verlag GmbH Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. Ihr Kontakt zum Verlag und Lektorat: Software & Support Verlag GmbH entwickler.press Geleitsstraße 14 60599 Frankfurt Tel.: +49 (0)69 630089 0 Fax: +49 (0)69 630089 89 lektorat@entwickler-press.de http://www.entwickler-press.de Lektorat: Sebastian Burkart Korrektorat: Katharina Klassen und Frauke Pesch Satz: mediaService, Siegen Belichtung, Druck & Bindung: M.P. Media-Print Informationstechnologie GmbH, Paderborn Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder andere Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. PHP – Endlich objektorientiert 5 Inhaltsverzeichnis 1 Eine Sprache wird erwachsen 7 1.1 Prozedurale Programmierung versus Objektorientierung 8 1.2 Zielgruppe dieses Buchs 9 1.3 Gliederung und Vorgehensweise 10 1.4 Verwendete Software 11 2 Die Sprache PHP: Prozedural 13 2.1 Grundlegende Syntax 13 2.1.1 Von Kommentaren, Variablen und Operanden 16 2.1.2 Datenfelder: Arrays 28 2.1.3 Verzweigungen 35 2.1.4 Schleifen 45 2.1.5 Funktionen 55 2.2 Erweiterte Funktionen 69 3 Vorgehensweise bei der Softwareentwicklung 101 3.1 Prozedurale und modulare Programmierung 102 3.1.1 Typische Projektstruktur 104 3.1.2 Ablauf eines Projekts 105 3.1.3 Erstellung der 3-Schichten-Architektur 113 3.2 Objektorientierte Programmierung 121 3.2.1 Typische Projektgröße und Projektdefinition 121 3.2.2 Begriffe der Objektorientierung 128 3.2.3 Vom Geschäftsprozess zur objektorientierten Analyse 145 3.2.4 Von der Analyse zum objektorientierten Design 151 3.2.5 Objektorientierte Programmierung 154 3.2.6 Die Bedeutung der Unified Modeling Language (UML) 161 4 PHP objektorientiert 211 4.1 Umsetzung objektorientierter Grundlagen 211 4.1.1 Die erste PHP-Klasse 211 4.1.2 Objekte in einer Session übergeben 215 4.1.3 Objekte speichern und laden: (De-)Serialisierung 218 4.1.4 PHP-eigene Methoden der Objektorientierung 219 4.1.5 Einzigartige Eigenschaften und Methoden 226 4.1.6 Konstanten in Klassen und Verhinderung von Vererbung 228 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Inhaltsverzeichnis 6 4.1.7 Referenzübergabe von Objekten und Kopien 230 4.1.8 Informationen über Objekte und Klassen zur Laufzeit 233 4.2 Realisierung von Klassengeflechten 237 4.2.1 Vererbung in PHP 237 4.2.2 Aufbau von Bekanntschaften: Assoziationen 246 4.2.3 Wechselseitige Bekanntschaften 248 4.2.4 Komposition und Aggregation 256 4.2.5 Interfaces und deren Implementierung 266 4.2.6 Umsetzung von Sequenzdiagrammen 272 4.2.7 Umsetzung von Zustandsautomaten 274 4.3 Objektorientierte Fehlerbehandlung 278 4.4 PHP und XML 292 4.5 Ein Web Service in PHP 314 4.6 Neuerungen in PHP 5.3 und Ausblick 318 4.6.1 Namensräume für größere Softwaremodule 318 4.6.2 Softwaremodule in PHP-Pakete bündeln: Phar 322 4.6.3 PHP in Verbindung mit Windows-Servern 323 4.6.4 Änderung im Late Static Binding 324 4.6.5 Neue und verbesserte Funktionen 325 4.6.6 Ausblick auf PHP 6 326 5Projektpraxis 329 5.1 Das Fallbeispiel der Depotverwaltung 329 5.1.1 Die Idee des Auftraggebers 329 5.1.2 Die objektorientierte Analyse 330 5.1.3 Das objektorientierte Design 342 5.1.4 Die objektorientierte Programmierung 344 5.1.5 Die nächsten Schritte 396 5.2 Erstellung von gutem Quellcode 398 5.2.1 Ein Styleguide für guten Quellcode 398 5.2.2 Erfolgreiche Codestrukturen – Design Patterns 401 5.2.3 Wie man es nicht machen sollte – Anti-Pattern 408 5.2.4 Entwicklungsumgebungen und Tools 413 Stichwortverzeichnis 427 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. PHP – Endlich objektorientiert 7 Eine Sprache wird erwachsen Die Zeiten, in denen man die von dem Dänen Rasmus Lerdorf entwickelte Skriptsprache PHP als „Personal Home Page Tools“ bezeichnete, um dynamische HTML-Tabellen aus einer kleinen MySQL-Datenbank, Kontaktformulare oder einzelne Onlineangebote zu erstellen, sind vorüber. Mit der Version 4.0 im Jahr 2000 bis hin zur Version 4.4.9 im Jahr 2008 wurde die Entwicklung von PHP zu einer erwachsenen Sprache mit eingebauter Datenbankunterstützung vorangetrieben, die sich weder vor Konkurrenten wie Active Server Pages (ASP) von Microsoft, noch vor JavaServer Pages (JSP) von Sun Microsys- tems verstecken muss. PHP hat in diesen Jahren den Ruf erlangt, leicht erlernbar zu sein und effiziente Internet- lösungen hervorzubringen, die gerade im Umfeld der Web-2.0-Euphorie und der Vernet- zung der Haushalte mit schneller DSL-Technologie sehr gefragt sind. Viele Provider bie- ten bereits LAMP-Server (Linux, Apache, MySQL, PHP) für Privatkunden an. Der Aufwand der Administration hält sich im Vergleich zu den Microsoft-Lösungen und den Java-Containern in Grenzen. So hat sich mit den Jahren eine erfolgreiche prozedurale, in C entwickelte Skriptsprache entwickelt, die sogar ihren Namen weiterentwickelt hat, der nun „Hypertext Preprocessor“ lautet. Dieser Name entstand, da der PHP-Interpreter den geschriebenen Quellcode in Form von herkömmlichen Textdateien vorverarbeitet, bevor der Datenstrom zum Webserver weitergeleitet wird. Während PHP 4 nun ab dem Jahr 2000 bis heute seinen Siegeszug antritt, wurde bereits 2004 die fünfte Version von PHP veröffentlicht. Mit dieser Version wurden objektorien- tierte Ansätze in die Sprache integriert sowie eine Unterstützung der Verarbeitung von XML-Daten. Die neue PHP-Version wurde über einen längeren Zeitraum kaum wahrge- nommen. Aus welchen Gründen soll man sich kompliziertere, objektorientierte Kon- zepte aneignen? Entwickler von vorwiegend kleinen PHP-Skripten für die eigene Home- page waren sehr zufrieden mit der herkömmlichen Art, in PHP zu programmieren. Interessanterweise wird in den Stellengesuchen der letzten Monate verstärkt die Anfor- derung an Entwickler gestellt, „objektorientiert in PHP“ programmieren zu können. Außerdem werden die Begriffe der Geschäftsprozeßanalyse, der objektorientierten Ana- lyse und des objektorientierten Designs (GPA, OOA und OOD) mit PHP in Verbindung gebracht. Ebenso ist die Nachfrage nach Schulungen im Bereich der service- und objekto- rientierten Konzepten seit einem Jahr stark gestiegen. Der Fokus der Entscheider wird seit einiger Zeit auf PHP 5 gelegt. Hier ist zunächst die Frage zu stellen, wie dieser Sin- neswandel zu erklären ist? Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 1 – Eine Sprache wird erwachsen 8 1.1 Prozedurale Programmierung versus Objektorientierung Die bis zu PHP 4 vorherrschende prozedurale Programmierweise besteht darin, eine Problemstellung in kleinere Unterprobleme nach dem Motto „Teile und Herrsche“ (Divide and Conquer) aufzuteilen. Die Idee besteht darin, dass die einzelnen Teilprob- leme unabhängig betrachtet werden können und leichter lösbar sind. Für jedes Unter- problem wurde dann eine Funktion geschrieben, die intern wiederum andere Funktio- nen aufrufen kann, um ihren Zweck zu erfüllen. Zusätzlich kann jede Funktion den Sprachumfang, also einzelne Befehle von PHP benutzen, um zur Lösung zu gelangen. Eine Funktion könnte beispielsweise Login lauten und als Parameter den Benutzernamen und das Kennwort erhalten. Diese Daten wurden zuvor in ein HTML-Formular eingege- ben und an ein PHP-Skript weitergeleitet. Diese Funktion Login wird die Unterfunktio- nen DBconnect und DBlesen enthalten, um serverseitig eine Verbindung zur Datenbank herzustellen und zu prüfen, ob ein Benutzer mit diesem Benutzernamen überhaupt exis- tiert. Ist das der Fall, so wird das richtige Kennwort aus der Datenbank ausgelesen und mit dem Kennwort aus dem HTML-Formular mittels PHP-Befehlen verglichen. Sind beide gleich, so gibt die Funktion Login den Wert OK zurück. Zu dem prozeduralen Programmierstil gehört außerdem, dass man einerseits Daten in einer Datenbank besitzt und andererseits Funktionen, die mit diesen Daten arbeiten. Die Funktionalität des Programms wird bei der prozeduralen Programmierung von den Daten getrennt. Die Daten durchlaufen die Funktionen und werden von ihnen interpre- tiert und verarbeitet. Die Denkweise der prozeduralen Programmierung wird von den Anhängern der Objekt- orientierung oft als „veraltet“ angesehen. Man programmiert heutzutage nicht mehr auf diese Art. Dieser Aussage widerspricht jedoch der Erfolg der bisherigen Vorgehensweise bei der Erstellung von PHP-Programmen. In der aktuellen PHP-5-Version sind beide Vorgehensweisen erlaubt. Einem Einsteiger in die PHP-Programmierung wird dadurch nicht gerade geholfen, dass er noch zwischen zwei verschiedenen Denkweisen unterscheiden muss. Doch wodurch unterscheidet sich die Objektorientierung in ihrer Denkweise? In der Objektorientierung werden die zu verarbeitenden Daten anhand ihrer Eigenschaften und der möglichen Operationen klassifiziert. Man hat also das Objekt Kunde. Ein Kunde besitzt seine eigenen Daten wie Name, Vorname usw. und zusätzlich dazu einen Satz von Funktionen. Man kann einen Kunden beispielsweise nach seinem Namen oder nach sei- nen Rechnungen fragen. Im Vergleich zu den anderen Denkweisen wird von der Objektorientierung gesagt, dass sie menschliche Organisationsmethoden aus der realen Welt besser nachbilden kann. Die Entwicklung der Software orientiert sich also mehr an den menschlichen Abläufen als an einer Maschinensprache. Aus technischer Sicht werden die Daten der Objekte dennoch wieder separat und getrennt von ihrer Funktionalität in den Datenbanken verwaltet. Langfristig versucht man, die relationalen Datenbanken durch objektorientierte Datenbanken zu ersetzen, in Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Zielgruppe dieses Buchs PHP – Endlich objektorientiert 9 denen man direkt die Objekte verwaltet. Heutzutage programmiert man ein Daten- zugriffsobjekt, das eine Verbindung zur Datenbank repräsentiert. Das Datenzugriffs- objekt fragt die Objekte an, welche gerade von Interesse sind. Das Datenzugriffsobjekt sucht sich die passenden Daten aus der relationalen Datenbank, baut die Objekte aus die- sen Daten zusammen und gibt diese Objekte dann als Ergebnis der Anfrage zurück. Die Anwendung arbeitet dann nur mit diesen Objekten, indem die in den Objekten integ- rierte Funktionalität verwendet wird. Über das Zugriffsobjekt werden die Daten auch wieder gespeichert. Es stellt sich die Frage, wann die Objektorientierung der prozeduralen Programmierung vorzuziehen ist? Man kann sagen, dass bei kleinen Projekten bis zu 10 000 Codezeilen bzw. bis zu zwei Personenjahren keine besondere formale Planung notwendig ist. Bei diesen Projekten kann eine einzelne Person den Überblick wahren und die vollständige Realisierung selbst vornehmen. Das ist typisch für freiberufliche PHP-Einzelentwickler, die in eigener Regie kleine Lösungen für ihre Kunden erstellen. Es sind weder Entwick- lerteams, noch komplexe Werkzeuge und Editoren notwendig. In diesem Umfeld hat sich PHP 4 bereits etabliert und bewährt. Durch die hohe Verbreitung und den guten Ruf von PHP wird die Skriptsprache jedoch in letzter Zeit verstärkt in größeren Projekten eingesetzt. Das bedeutet, das sowohl auf der Seite des Kunden als auch auf der Seite der Entwickler eine Vielzahl von Personen am Projekt beteiligt ist. Meistens sind sogar die Anforderungen an das Projekt im Vorfeld nur grob oder gar nicht bekannt. In diesem Fall werden eine Geschäftsprozeßanalyse und agile Vorgehensmethoden der Softwareentwicklung eingesetzt. Auch die Objektori- entierung besteht nicht nur aus der objektorientierten Programmierung (OOP). Im Anschluss an die Geschäftsprozeßanalyse erfolgt in großen Projekten in einem iterativ- inkrementellen Prozess eine objektorientierte Analyse und ein Design der Lösung, das in einer objektorientierten Programmierung mit PHP mündet. Als gemeinsame Sprache für Kunden, Analytiker und Entwickler während der OOA und OOD hat sich in den letzten Jahren die Unified Modeling Language (UML) durchge- setzt. Die UML bietet auch eine wohl definierte Vorgehensweise, um von einem Kunden- wunsch zu einem Softwareartefakt zu gelangen. Es ist also eine genaue Planung, sowohl der Kosten als auch sämtlicher Ressourcen erforderlich. Auch die Werkzeuge, die zum Einsatz kommen, unterscheiden sich grundlegend von einem herkömmlichen Editor. So sind Tools zur Projektverwaltung, Quellcodeversionierung, zur Dokumentation sowie zur Durchführung von automatisierten Funktions- und Integrationstests notwendig geworden. Für einen unerfahrenen Entwickler, der sich die durchaus interessante Sprache PHP erst- malig ansehen will, mögen diese Ausführungen zunächst abschreckend sein. Das führt direkt zur Fragestellung nach der Zielgruppe dieses Buchs sowie zu dessen Aufbau. 1.2 Zielgruppe dieses Buchs Nach den komplexen Ausführungen ist zunächst beruhigend, nochmals zu betonen, dass die prozedurale Programmierung auch weiterhin mit PHP 5 möglich ist. Eine Anlei- tung zur Erstellung dynamischer Webauftritte mit PHP ist in diesem Buch im zweiten Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. [...]... und gibt sie an den PHP- Interpreter weiter Jeder Bereich zwischen den Marken PHP – Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 15 2 – Die Sprache PHP: Prozedural < ?php ?> wird daraufhin vom Interpreter als PHP- Code analysiert Dieser Code kann wiederum eine HTML-Ausgabe erzeugen, die dann an den Webserver weitergegeben wird Der PHP- Code selbst gelangt... Möglichkeit, den Datentyp einer Variablen innerhalb des PHP- Skripts abzufragen Diese Befehle geben stets einen Wahrheitswert zurück, der dann über eine Verzweigung (Kapitel 2.1.3) Einfluss auf den weiteren Ablauf des PHP- Skripts nehmen kann PHP – Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 21 2 – Die Sprache PHP: Prozedural Befehl Bedeutung is_int($var)... Variablen, auch andere Arrays, enthalten kann ̈ Einzelne Elemente in einem PHP- Array können entweder über einen numerischen Index oder einen Suchschlüssel angesprochen werden Ein solcher Suchschlüssel wird key genannt PHP – Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 19 2 – Die Sprache PHP: Prozedural ̈ Ein Array wird zumeist über Schleifen verwaltet... Abbildung 2.2: Aufruf einer HTML-Datei Um Ihre erste PHP- Datei zu erstellen, erzeugen Sie in dem htdocs-Verzeichnis mit Ihrem Texteditor eine Datei mit dem Namen hallo .php: < ?php $wert=’Hallo’; ?> < ?php echo $wert?> < ?php echo $wert?> Listing 2.2: Das erste PHP- Skript hallo .php Die PHP- Datei definiert zunächst eine Variable wert und... Kombinierte Zuweisungsoperatoren PHP – Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 25 2 – Die Sprache PHP: Prozedural Ebenso können Sie die Ergebnisse von mathematischen Berechnungen in separaten Variablen ablegen Interessant in beiden Fällen ist der Punktoperator zum Verbinden von Zeichenketten, da eine große Aufgabe von PHP in der Verarbeitung von... werden In einer Vielzahl von Anwen- PHP – Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 27 2 – Die Sprache PHP: Prozedural dungen ist das Verändern einer Variable um 1 von Bedeutung, beispielsweise um in einem Datenfeld zu suchen Statt einer Operation mit anschließender Wertzuweisung wie $x=$x+1 oder $x+=1 kann in PHP eine übersichtlichere und performantere... Basisverzeichnis für Ihre selbstgeschriebenen Dateien Erstellen Sie in einem Texteditor im htdocs-Verzeichnis die Datei hallo.html mit folgendem Inhalt: PHP – Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 13 2 – Die Sprache PHP: Prozedural Hallo Hallo Listing 2.1: Die erste Datei hallo.html im... objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 23 2 – Die Sprache PHP: Prozedural Verwaltung von Variablen und Referenzen/Zeigern PHP bietet eine weitere, ungewöhnliche Funktion zur Verwaltung von Variablen Mit PHP können Sie nicht nur den Wert einer Variablen verändern, sondern auch ihre Bezeichnung Betrachten Sie dazu das Listing 2.10 < ?php $x="name"; $$x="daten";... einem PHP- Anfänger leicht vergessen wird Die Zuweisung eines Werts erfolgt direkt über den =-Operator Listing 2.4 zeigt gültige Deklarationen von Variablen: < ?php $a=4; $b=1; $c=8.3; $d="Hallo"; $e='Hallo'; $f=TRUE; $g=FALSE; $h=false; $i='Spalte1Spalte2' ?> Listing 2.4: Deklaration und Zuweisung von Variablen PHP – Endlich objektorientiert Please purchase PDF. .. Dadurch bleibt der PHP- Quellcode für den Client unsichtbar Ebenso wird jeder Text außerhalb der Marken < ?php ?> unmittelbar an den Webserver weitergeleitet Das Prinzip der Verarbeitung einer PHP- Datei ist in Abbildung 2.3 skizziert Abbildung 2.3: Aufruf einer PHP- Datei Wenn Sie dieses Beispiel erfolgreich getestet haben, sind Sie erfahrungsgemäß sehr gespannt, welche Befehle die Sprache PHP bietet und . purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. PHP – Endlich. erste PHP- Skript hallo .php Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 2 – Die Sprache PHP: Prozedural 16 < ?php ?>