PHP Design Patterns

Stephan Schmidt

Published by O’Reilly Media Germany

Einleitung

Design Patterns bieten Lösungsmuster für häufig auftretende Entwurfsaufgaben in der Software-Entwicklung, aber sie gelten als sehr kompliziert und werden oft mit komplexen UML-Diagrammen und schwer zu verstehenden Architekturen assoziiert. Diese Komplexität mag auf den ersten Blick nicht zu der Programmiersprache PHP passen, doch wird Ihnen dieses Buch zeigen, dass Design Patterns nicht so kompliziert sind, wie sie nach dem Lesen eines der Standardwerke erscheinen. Anhand von praxisbezogenen Anwendungen in PHP werden Sie verschiedene Entwurfsmuster kennenlernen, die Sie bei Ihrer täglichen Arbeit unterstützen und für die es nicht nötig ist, große Meetings einzuberufen oder mehrseitige Diagramme zu erstellen.

Haben Sie erst einmal gelernt, ein Standardproblem zu erkennen und eine Lösung aus dem Pattern-Katalog darauf anzuwenden, werden Sie dieses Pattern beim nächsten Auftreten desselben Problems intuitiv einsetzen — wie Sie es auch mit einer PHP-Funktion wie str_replace() machen, wenn Sie eine Zeichenkette innerhalb eines Textes ersetzen möchten. Durch die Anleitungen in diesem Buch werden Design Patterns zu einem Werkzeug der PHP-Entwicklung, das Ihren Programmieralltag sowohl erleichtert als auch bereichert.

PHP 5 brachte eine Menge Neuerungen für PHP mit sich. So wurde zum Beispiel die XML-Unterstützung komplett überarbeitet und braucht sich nicht mehr vor anderen Sprachen zu verstecken. Außerdem ist die Nutzung von Webservices über SOAP nun ein Kinderspiel und wird durch die neue SOAP-Erweiterung automatisch von PHP unterstützt. Der Zugriff auf die verschiedensten Datenbanken ist dank PHP 5.1 und PDO nun auch über eine einheitliche Schnittstelle möglich.

Doch diese verschiedenen APIs allein ermöglichen es noch nicht, professionelle Anwendungen in PHP zu realisieren. Dafür sorgt erst die Zend Engine 2 mit dem komplett überarbeiteten Objektmodell. Dieses bietet nun Features wie Sichtbarkeiten für Methoden und Eigenschaften, Interfaces, Exceptions oder auch abstrakte und finale Klassen. Dadurch wird es Ihnen als PHP-Entwickler nun möglich, Software-Architekturen zu entwerfen und umzusetzen, die denen von Java- oder C++-Entwicklern in nichts nachstehen.

Dieses Buch wird Ihnen zeigen, wie die neuen Sprachfeatures von PHP 5.3 genutzt werden können, um Software so zu designen, dass sie modernen Standards entspricht, zukunftssicher ist und sich problemlos erweitern lässt, wenn sich die Anforderungen ändern. Neben einer kurzen Einführung in die neuen Sprachkonstrukte erläutert Ihnen das Buch grundlegenden Richtlinien, die Sie beim Design einer Applikation beachten sollten. Darüber hinaus bieten Ihnen Design Patterns eine Sprache, in der Sie sich mit anderen Entwicklern über häufige Probleme und deren Lösungen austauschen können, ohne dabei jedes Detail bis ins Kleinste erläutern zu müssen. Dadurch können Fragen des Software-Designs schneller diskutiert und somit auch gelöst werden.

An wen sich dieses Buch richtet

Dieses Buch richtet sich an Entwickler, die bereits Erfahrung mit PHP-Programmierung haben.[1] Optimalerweise haben Sie bereits in PHP 4 oder PHP 5 auf objektorientierte Programmierung zurückgegriffen, um eine Anwendung zu realisieren, doch werden in diesem Buch keine tiefer gehenden Kenntnisse der objektorientierten Programmierung in PHP 5 vorausgesetzt. Sollten Sie bisher nur PHP 4 verwendet haben, finden Sie in Kapitel 1 zunächst eine Einführung in die neuen Sprachfeatures von PHP 5, die vor allem in Bezug auf die Objektorientierung einige Neuerungen mit sich bringen. Sollten Sie bereits mit PHP 5 objektorientiert programmiert haben, so mag die Vorstellung der neuen Funktionalitäten in PHP 5.3 im ersten Kapitel trotzdem für Sie relevant sein.

Auch müssen Sie sich nicht zuerst durch ein Buch zum Thema UML kämpfen, um die Erklärung eines Patterns zu verstehen. Neben einer kurzen Einführung in die Unified Modeling Language bietet Ihnen dieses Buch Diagramme, deren Inhalt sich Ihnen auch erschließt, ohne dass Sie dazu ein UML-Profi sein müssen.

PHP Design Patterns wurde für Programmierer geschrieben, die bei der Entwicklung neuer Anwendungen auf objektorientierte Programmierung zurückgreifen möchten, um professionelle Architekturen aufzubauen. Der Schwerpunkt dieses Buchs liegt dabei auf dem Design der Software-Architektur, vernachlässigt wird die Implementierung von Low-Level-Logik wie Dateizugriff, Parsen von XML-Dokumenten oder Datenbankzugriff über SQL. Wenn Sie Lösungen für diese Art von Problemen suchen, ist das PHP 5 Kochbuch, das ebenfalls im O'Reilly Verlag erschienen ist, die beste Wahl.

Sollten Sie wenig Erfahrung mit PHP haben, jedoch in anderen Sprachen schon Entwurfsmuster eingesetzt haben, können Sie dieses Buch auch lesen, um dabei Implementierungen verschiedener Patterns kennenzulernen, die nur in PHP auf diese Art realisiert werden können.

Aufbau dieses Buchs

Dieses Buch kann auf zwei Arten verwendet werden. Zum einen können Sie es linear von Anfang bis Ende lesen, um Schritt für Schritt die einzelnen Entwurfsmuster kennenzulernen, und zum anderen kann es wie ein Katalog genutzt werden, in dem Sie das Entwurfsmuster, das Sie einsetzen möchten, direkt nachschlagen und sich nur mit dessen Implementierung befassen. Die Entwurfsmuster sind dazu in einzelne Gruppen untergliedert, die jeweils innerhalb eines Kapitels abgehandelt werden.

Dabei werden bei manchen Patterns zwar andere Entwurfsmuster referenziert, jedoch ist es auch möglich, die Patterns unabhängig voneinander anzuwenden. Sollten Sie noch keine oder wenig Erfahrung mit objektorientiertem Softwareentwurf und Design Patterns haben, finden Sie am Anfang des Buchs eine Einführung in diese Themen.

Kapitel 1, Schöne neue Welt: Objektorientierte Programmierung in PHP 5,

stellt Ihnen die neuen Sprachfeatures vor. Dabei beginnt das Kapitel mit der Definition von Klassen und Objekten und reicht über Namespaces und Closures bis hin zur Fehlerbehandlung mit Exceptions. Das Kapitel geht auch auf spezielle Features von PHP ein und zeigt, welche Interzeptoren PHP bietet und wie diese zu Ihrem Vorteil eingesetzt werden können.

Kapitel 2, Die Standard PHP Library,

widmet sich der Standard PHP Library (SPL) und stellt die von dieser Erweiterung mitgelieferten Interfaces und Klassen vor. Am Ende des Kapitels finden Sie einen Exkurs in die SPL_Types-Erweiterung, die nicht Teil der PHPDistribution ist.

Kapitel 3, Gutes Software-Design,

zeigt Ihnen, wie die im ersten Kapitel vorgestellten Sprachfeatures verwendet werden. Es demonstriert an einem Beispiel, welche Fehler beim Entwurf einer Architektur vermieden werden sollen, und leitet daraus allgemein gültige Regeln ab, die als Basis der Design Patterns in diesem Buch dienen. In diesem Kapitel wird auch die Unified Modeling Language behandelt und die Struktur der folgenden Kapitel erklärt.

Nachdem diese drei Kapitel die Grundlagen objektorientierter Programmierung behandelt haben, widmen sich die folgenden Kapitel den Design Patterns:

In Kapitel 4, Erzeugungsmuster,

werden Entwurfsmuster behandelt, die sich um die Erzeugung von Objekten kümmern.

Kapitel 5, Strukturmuster,

stellt verschiedene Design Patterns vor, die sich mit der Komposition verschiedener Objekte befassen. Dabei lernen Sie Strategien kennen, die diese Kompositionen erweiterbar halten.

Kapitel 6, Verhaltensmuster,

befasst sich schließlich mit der letzten Gruppe der klassischen Entwurfsmuster. Diese Patterns lösen Probleme, die häufig bei der Interaktion verschiedener Objekte miteinander auftreten können.

Kapitel 7, Enterprise-Patterns: Datenschicht und Business-Logik,

stellt Entwurfsmuster vor, die nicht mehr als Teil der klassischen Patterns angesehen werden. Diese Patterns sind aus Enterprise-Anwendungen und vor allem aus der Java-Programmierung bekannt. Dieses Kapitel behandelt auch die Datenbankabstraktion basierend auf Propel.

Kapitel 8, Enterprise-Patterns: Die Präsentationsschicht,

befasst sich schließlich mit Entwurfsmustern, die Probleme bei der Darstellung der Daten und der Interaktion mit dem Benutzer lösen. Da PHP häufig für die Implementierung von Webanwendungen eingesetzt wird, werden die Patterns in diesem Kapitel in einer Webumgebung realisiert. In diesem Kapitel wird auch die Template-Engine patTemplate vorgestellt.

Anhang A

behandelt schließlich die Installation von PEAR, das in den Kapitel 7 und Kapitel 8 eingesetzt wird.

Änderungen in der zweiten Auflage

Die zweite Auflage wurde hauptsächlich geschrieben, um die gezeigten Beispiele an PHP 5.3 anzupassen. Jedoch wurden gleichzeitig alle Kapitel überarbeitet und sogar erweitert. Kapitel 1 enthält in dieser Auflage die aktuellen Informationen zu PHP 5.3 und behandelt Sprachfeatures wie Namespaces und Closures. Kapitel 2 ist ein neues Kapitel, das aus Kapitel 1 der ersten Auflage hervorgegangen ist. Durch den erhöhten Funktionsumfang von sowohl PHP als auch der SPL wurden diese Inhalte zu umfangreich für ein einzelnes Kapitel. In dieser Ausgabe wird daher der SPL ein eigenes Kapitel gewidmet, das sich nun auch mit dem Autoloading mit der SPL, verschiedenen Hilfsfunktionen und der SPL_Types-Erweiterung befasst. Kapitel 3 wurde um die Themen Fluent Interfaces und Dependency Injection erweitert. Dieses Kapitel behandelt nun auch den Stubbles-Inversion-of-Control-Container.

Die restlichen Kapitel wurden fast ausnahmslos um weitere Entwurfsmuster ergänzt. So können Sie in Kapitel 4 in dieser Auflage etwas über das Prototype-Pattern lesen, Kapitel 5 wurde um das Flyweight-Pattern erweitert, und Kapitel 6 wurde mit dem Stateund dem Chain-of-Responsibility-Pattern gleich um zwei Muster ergänzt.

Im Bereich der Enterprise-Patterns werden in Kapitel 7 die Patterns Identity-Map und Data-Mapper nun vollständig vorgestellt. Weiterhin finden Sie in diesem Kapitel nun auch Informationen zur neuen Version von Propel, die auf PDO basiert. In Kapitel 8 finden Sie kein neues Pattern, jedoch wurden auch hier die Beispiele an PHP 5.3 angepasst und die Versionen aller verwendeten Bibliotheken auf die aktuellste Version gebracht.

Weiterführende Quellen

Eine Reihe von Websites und Büchern bieten weitergehende Informationen rund um Design Patterns und PHP:

Websites

Das Internet wächst ständig weiter, und so ist es auch eine gute Quelle, wenn Sie nach neuen Entwurfsmustern suchen. Gute Anlaufstellen sind immer die folgenden Websites:

phpPatterns

http://www.phppatterns.com

Diese Website war die erste, die sich mit dem Thema Design Patterns im Zusammenhang mit PHP befasst hat. Hier finden Sie Codebeispiele, die Ihnen die Anwendung der bekanntesten Design Patterns in PHP zeigen.

Patterns for PHP

http://www.patternsforphp.com/

Diese recht neue Seite hat es sich auch zum Ziel gemacht, Referenzimplementierungen in PHP für die bekanntesten Design Patterns zur Verfügung zu stellen.

Website von Martin Fowler

http://www.martinfowler.com/

Auf der Website von Martin Fowler befinden sich einige interessante Artikel zum Thema Enterprise-Patterns. Er bezieht diese zwar nicht auf PHP, jedoch können sie problemlos auch in PHP angewandt werden.

Core J2EE Patterns

http://java.sun.com/blueprints/corej2eepatterns/

Sun bietet auf dieser Seite eine Liste von Standard-J2EE-Patterns an, von denen Sie einige auch in diesem Buch wiederfinden werden.

PHP Design Patterns

http://www.phpdesignpatterns.de

Auf der Website zum Buch finden Sie alle Codebeispiele zum Download.

Neben Websites speziell zum Thema Patterns sind natürlich auch Websites interessant, die sich generell mit dem Thema PHP beschäftigen.

Das PHP Handbuch

http://www.php.net/manual/de/

Im PHP Handbuch finden Sie die Dokumentation zu allen Standardfunktionen, aber auch zu sehr vielen PHP-Erweiterungen. Interessant ist hierbei auch das Kapitel über Klassen und Objekte.

PHP Wiki

http://wiki.cc/php

Im PHP Wiki finden Sie einige interessante Artikel, die sich mit der Standard PHP Library befassen.

PEAR

http://pear.php.net/

Die offizielle PHP-Klassenbibliothek ist eine gute Anlaufstelle, um nach Anregungen in Bezug auf Software-Design zu suchen. Viele der Pakete setzen Design Patterns ein.

Zend Developer Zone

http://devzone.zend.com/

In der Entwickler-Zone der Zend-Website werden regelmäßig Artikel und Tutorials veröffentlicht, die sich mit fortgeschrittener PHP-Entwicklung befassen, unter anderem auch mit Design Patterns.

Bücher

Natürlich können in diesem Buch nicht alle Design Patterns bis ins letzte Detail behandelt werden. Wenn allerdings Ihr Interesse an der Pattern-basierten Entwicklung geweckt wurde, finden Sie im Folgenden noch eine Liste von Büchern, die die angesprochenen Themen vertiefen.

Entwurfsmuster — Elemente wiederverwendbarer objektorientierter Software von Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides (Addison-Wesley). Das Standardwerk zum Thema Entwurfsmuster und für jeden, der sich mit Design Patterns befasst, ein absolutes Muss. Auch als das Gang-of-Four-Buch bekannt, basierend auf dem Spitznamen der vier Autoren.

Entwurfsmuster von Kopf bis Fuß von Eric Freeman & Elisabeth Freeman (O'Reilly Verlag). Dieses Buch vermittelt einen praxisorientierten Einstieg in die Welt der Entwurfsmuster. Es behandelt sowohl die klassischen Gang-of-Four-Patterns als auch Themen wie den Model-View-Controller.

Patterns für Enterprise Application-Architekturen von Martin Fowler (mitp). In diesem Buch finden Sie Patterns, die nicht zu den klassischen Gang-of-Four-Entwurfsmustern zählen. Interessant ist dabei besonders das Kapitel, das sich mit Mustern für Webpräsentationen befasst.

Natürlich gibt es neben diesen Büchern noch weitere, die Ihnen bei der Umsetzung von Entwurfsmustern in PHP gute Dienste leisten werden. Einige davon sollen nun noch kurz genannt werden:

Programmieren mit PHP von Rasmus Lerdorf (O'Reilly Verlag)

Professionelle PHP 5-Programmierung von George Schlossnagle (Addison-Wesley

Professionelle Softwareentwicklung mit PHP 5 von Sebastian Bergmann (Dpunkt)

PHP 5 Kochbuch von David Sklar, Adam Trachtenberg, Ulrich Speidel & Stephan Schmidt (O'Reilly Verlag)

PHP in a Nutshell von Paul Hudson (O'Reilly Verlag)

In diesem Buch verwendete Konventionen

Für viele Entwurfsmuster existiert sowohl eine englische als auch eine deutsche Bezeichnung. In diesem Buch wird primär die englische Bezeichnung verwendet, da diese sich, wie so oft in der Softwareentwicklung, gegenüber den deutschen Begriffen durchgesetzt hat. In den einzelnen Pattern-Beschreibungen wird jedoch auch die deutsche Bezeichnung verwendet, damit Sie diese dem Pattern zuordnen können, falls Sie sie in einem anderen Zusammenhang hören sollten.

Programmierkonventionen

In allen Beispielen wurden die Anfangs- und Schlusskennzeichen <?php ?> weggelassen, da grundsätzlich nur PHP-Code verwendet wird. Als Bezeichner für Klassen und Methoden werden englische Begriffe verwendet, eine Technik, die auch für Ihre Projekte zu empfehlen ist, da die Bezeichner dabei besser zu den nativen PHP-Funktions- und Klassennamen passen.

Aus Gründen der Übersichtlichkeit wurde auf den Einsatz von Kommentaren weitestgehend verzichtet. In Ihren eigenen Anwendungen sollten Sie darauf achten, zumindest API-Beschreibungen im PHP-Doc[2]-Format einzusetzen.

Alle Beispiele sind so geschrieben worden, dass sie mit PHP 5.3 laufen. Wenn Sie eine ältere Version von PHP benutzen möchten, müssen Sie auf die Verwendung von Namespaces verzichten und sowohl die namespace- als auch die use-Anweisungen aus den Listings entfernen. Natürlich können Sie auch auf die erste Auflage dieses Buchs zurückgreifen, jedoch wurden einige Entwurfsmuster erst in dieser Auflage hinzugefügt.

Typografische Konventionen

Dieses Buch verwendet die folgenden typografischen Konventionen:

Kursiv

Wird für URLs, die Namen von Verzeichnissen und Dateien, Optionen und gelegentlich zur Hervorhebung verwendet.

Nichtproportionalschrift

Wird für Codebeispiele, den Inhalt von Dateien und sowie für die Namen von Variablen, Befehlen und anderen Codeabschnitten verwendet.

Nichtproportionalschrift fett

Wird in Codebeispielen verwendet, um wichtige Codeteile hervorzuheben.

Tipp

Dieses Symbol zeigt einen Tipp, einen Vorschlag oder einen allgemeinen Hinweis an.

Warnung

Dieses Symbol zeigt eine Warnung an.

Verwendung der Codebeispiele

Dieses Buch soll Ihnen bei Ihrer Arbeit helfen. Es ist allgemein erlaubt, den Code aus diesem Buch in Ihren Programmen und Dokumentationen weiterzuverwenden. Hierfür ist es nicht notwendig, uns um Erlaubnis zu fragen, es sei denn, es handelt sich um eine größere Menge Code. So ist es beim Schreiben eines Programms, das einige Codeschnipsel dieses Buchs verwendet, nicht nötig, sich mit uns in Verbindung zu setzen; beim Verkauf oder Vertrieb einer CD-ROM mit Beispielen aus O'Reilly-Büchern dagegen schon. Das Beantworten einer Frage durch das Zitat von Beispielcode erfordert keine Erlaubnis. Verwenden Sie einen erheblichen Teil des Beispielcodes aus diesem Buch in Ihrer Dokumentation, ist dagegen unsere Erlaubnis nötig.

Eine Quellenangabe ist zwar erwünscht, aber nicht obligatorisch. Hierzu gehört in der Regel die Erwähnung von Titel, Autor, Verlag und ISBN, zum Beispiel: »PHP Design Patterns, 2. Auflage von Stephan Schmidt. Copyright 2009 O'Reilly Verlag, ISBN 3-89721-864-2«.

Falls Sie sich nicht sicher sind, ob die Nutzung der Codebeispiele außerhalb der hier erteilten Erlaubnis liegt, nehmen Sie bitte unter der Adresse kommentar@oreilly.de Kontakt mit uns auf.

Die Codebeispiele zu diesem Buch

Zu den PHP Design Patterns gibt es eine Website des Autors, auf der Sie die Codebeispiele sowie Errata und weitere Informationen zum Buch finden. Die Adresse lautet:

http://www.phpdesignpatterns.de/

Die Codebeispiele zum Buch und weitere Informationen finden Sie auch auf der Website von O'Reilly unter:

http://www.oreilly.de/catalog/phpdesignpat2ger/

Danksagungen

Die zweite Auflage dieses Buchs ist meinem Vater gewidmet, der wenige Tage vor der Veröffentlichung der ersten Auflage sehr unerwartet und plötzlich verstorben ist. Er war es, mit dem ich schon in Kindheitstagen vor einem Commodore C128 saß und mit dem versuchte, diesem mit unseren Basic-Kenntnissen animierte Grafiken zu entlocken. Er hat mich die ganze Zeit auf meinem Lebensweg unterstützt und wusste schon vor mir, dass ich nach Umwegen wieder bei der Softwareentwicklung landen sollte. Ich werde Dich immer vermissen, Josch.

Daneben gilt mein Dank auch bei dieser Auflage wieder meiner Frau Sandra. Sie hat mich erneut bedingungslos unterstützt und musste die Planung unseres Hauses viel zu oft allein übernehmen, damit ich in Ruhe schreiben konnte. Und natürlich hat sie auch dieses Mal wieder dafür gesorgt, dass ich weder verdurstet noch verhungert bin, während ich mich in einem anderen Namespace am Notebook befand.

Besonders dankbar bin ich meiner Lektorin Alexandra Follenius, die auch Verständnis hatte, als mir der Kopf oft nicht nach Schreiben neuer Kapitel oder Überarbeitung bestehender Texte stand. Ich habe so manchen versprochenen Abgabetermin verschwitzt, und Alexandra hat weiterhin daran geglaubt, dass wir eine zweite Auflage dieses Buchs veröffentlichen würden.

Ich danke auch den Menschen, die das Manuskript vor der Veröffentlichung fachlich begutachtet haben: allen voran Frank Kleine, der besonders bei der zweiten Auflage jede Kleinigkeit geprüft hat und eine Menge Fehler aufdecken konnte. Wie er bemerken konnte, dass ein Verweis auf eine falsche Seite ging, ist mir bis heute schleierhaft. Von ihm stammen auch sehr viele Anregungen im Bereich der Enterprise-Patterns, allen voran die vorgestellte Implementierung des Data-Mapper-Patterns. Aber auch Gerd Schaufelberger und Carsten Lucke standen mir dieses Mal wieder mit ihrem Rat zur Seite und haben mir durch ihr Wissen und den jahrelangen Austausch über Softwareentwicklung erst die Möglichkeit eröffnet, ein Buch über Software-Design und -Architektur zu schreiben.

Mein Dank gilt auch Georg Rothweiler; ohne ihn wäre ich sicher nie so lange bei der Programmierung geblieben. Seine fantastischen Ideen und Grafiken in den letzten 20 Jahren haben mich immer wieder angespornt, neue Wege zu gehen, sei es bei der Programmierung in Assembler oder bei der Umsetzung von Webanwendungen. Dasselbe gilt für Sebastian Mordziol, mit ihm zusammen habe ich viel gelernt, was schließlich in diesem Buch mündete. Auch er hat mich immer wieder ermutigt, Architekturen noch flexibler zu gestalten. Diesen beiden danke ich auch für die Website zum Buch (http://www.phpdesignpatterns.de).

Ich danke auch allen meinen Freunden, denen ich Einladungen zum Grillen oder ins Kino absagen musste, da ich Abgabetermine einhalten wollte. Ich hoffe, das bald durch eine Einladung zum Grillen meinerseits wieder gutmachen zu können. Und natürlich folgt dann auch ein Besuch bei meinem Lieblingsfranzosen und seiner fabelhaften Tochter, die ich dieses Jahr schon wieder versetzt habe.

[1] Sollten Sie noch nicht mit PHP vertraut sein, sollten Sie zunächst Einführung in PHP 5 aus dem O'Reilly Verlag lesen, um Grundlegendes über die Sprache zu erfahren.

[2] http://www.phpdoc.org

Kapitel 1. Schöne neue Welt: Objektorientierte Programmierung in PHP 5

Auch wenn die PHP-Dokumentation zu PHP 4 bereits ein Kapitel zu objektorientierter Programmierung enthielt, so war es doch vor PHP 5 nur schwer möglich, Architekturen, die auf objektorientiertem Software-Design aufsetzen, zu implementieren. PHP 4 bot zwar die Möglichkeit, Klassen zu definieren und davon Objekte zu instanziieren, jedoch waren diese intern kaum mehr als assoziative Arrays. Wenn Applikationen größer wurden und sich nicht mehr mit einfachen Skripten reproduzieren ließen, führte dies häufig zu Problemen. Diese Probleme waren kaum zu lokalisieren, und noch seltener konnten sie zufriedenstellend gelöst werden. Hinzu kam noch, dass die Funktionalitäten, die aus anderen objektorientierten Sprachen bekannt waren, in PHP 4 nur sehr begrenzt implementiert waren. So suchte man Destruktoren oder auch Schlüsselwörter, die die Sichtbarkeit eingrenzen, vergeblich.

Bei der Entwicklung von PHP 5 wurde somit das Hauptaugenmerk auf die Weiterentwicklung der OO-Fähigkeiten von PHP gelegt, und es wurden nahezu alle Möglichkeiten bereitgestellt, die erfahrenere Programmierer aus Sprachen wie Java oder C++ kennen. Diese Entwicklung wurde mit den Versionen 5.1 bis 5.3 noch weiter gefördert und hat ihren Höhepunkt nun mit der Einführung der lange vermissten Namespaces erreicht.

In diesem ersten Kapitel werden Sie einen kleinen Streifzug durch die Welt der objektorientierten Programmierung in PHP wagen und sehen, wie die neuen Möglichkeiten angewandt werden. Zwar ist dies ein Buch über Entwurfsmuster und nicht über objektorientierte Programmierung, jedoch basieren nahezu alle Design Patterns auf Klassen und Objekten sowie deren Beziehungen zueinander, daher ist ein umfassendes Wissen über die objektorientierte Programmierung in PHP unerlässlich.

Sie werden sich zunächst mit den Grundlagen objektorientierter Programmierung sowie deren Implementierung in PHP 5 vertraut machen. Sie werden lernen, wie Sie mithilfe von Namespaces in PHP 5.3 Klassenkonflikte mit fremden Klassen vermeiden können. Weiterhin werden Sie Funktionalitäten kennenlernen, die PHP 5 zu einer einzigartigen Sprache im Bereich der objektorientierten Programmierung machen, und lernen, wie Sie sich mithilfe von Interzeptoren in den Kern von PHP, die Zend Engine, einhängen können, um das Verhalten Ihrer Objekte zu beeinflussen. Außerdem behandelt dieses Kapitel die Fehlerbehandlung mit Exceptions und stellt Ihnen die Neuerungen in PHP 5.3 in Bezug auf die objektorientierte Programmierung vor. Diese Neuerungen wurden in dieser zweiten Auflage an den passenden Stellen in den Text eingebaut.

Sollten Sie bereits mit objektorientierter Programmierung in PHP 5 vertraut sein, können Sie die nachfolgenden Seiten getrost überspringen und direkt in das Kapitel zum Software- Design einsteigen. Interessieren Sie sich jedoch nur für die Neuerungen in PHP 5.3, finden Sie zu Beginn dieses Kapitels eine kurze Zusammenfassung der neuen Features. Sie sind noch da? Gut, dann können Sie sofort mit dem Streifzug beginnen.

Für Ungeduldige: Neue Features in PHP 5.3

Wenn Sie bereits mit den objektorientierten Features in PHP vertraut sind, da Sie zum Beispiel schon die erste Auflage dieses Buchs gelesen haben, sich aber für die Neuigkeiten in Bezug auf objektorientierte Programmierung in PHP 5.3 interessieren, so sind Sie hier genau richtig. Auf den folgenden Seiten finden Sie eine kurze Zusammenfassung der neuen Features. Sollten Sie sich noch gar nicht mit objektorientierter Programmierung in PHP beschäftigt haben und eine umfassende Einführung wünschen, überspringen Sie am besten die folgenden Seiten und beginnen stattdessen auf Seite 5.

Namespaces

Das wichtigste neue Feature in PHP 5.3 sind mit Sicherheit Namespaces. Mithilfe dieser Funktionalität verhindern Sie die in PHP häufig auftretenden Konflikte zwischen Klassen aus verschiedenen Frameworks oder Bibliotheken, die zufällig den gleichen Namen haben.

Mithilfe von Namespaces erstellen Sie sich einen eigenen Namensraum, der nur von Ihnen verwendet wird und in dem Sie keine Probleme mit Namenskonflikten haben können:

namespace MyNamespace;

    class Foo {
        ... Code der Klasse
    }

Alle Klassen innerhalb dieses Namespace sind somit nicht im globalen Namensraum verfügbar, sondern müssen immer erst über ihren Namespace adressiert werden:

$foo = new MyNamespace\Foo();

Um unnötige Tipparbeit zu vermeiden, ist es Ihnen auch möglich, eine Klasse aus einem Namespace in den globalen (oder auch jeden anderen Namespace) zu importieren:

use MyNamespace\Foo;
$foo = new Foo();

Sollten dadurch erneut Konflikte auftreten, da der globale Namensraum bereits eine Klasse mit dem Namen Foo enthält, können Sie die Klasse beim Importieren auch mit einem anderen Namen versehen:

use MyNamespace\Foo as MyFoo;
$foo = new MyFoo();

Klassen aus einem Namespace können verwendet werden, um interne PHP-Klassen zu überschreiben, es ist jedoch nicht möglich, mit einer Userland-Klasse eine andere Userland- Klasse zu überschreiben. Dabei reagiert PHP mit einem Fehler, um nicht gewünschtes Verhalten zu verhindern. Neben Klassen können PHP-Namespaces auch Funktionen und Konstanten enthalten. Mehr zu Namespaces lesen Sie ab Seite 31.

Closures

Eine weitere Neuerung ist die Einführung von Closures in den PHP-Sprachkern. Da dieses Feature in sehr vielen anderen dynamischen Sprachen bereits verfügbar ist, gehörten Closures zu den am meisten geforderten Features in PHP 5.3. Durch Closures können Sie eine Funktionalität zur Laufzeit in einer anonymen Funktion kapseln und dabei Variablen aus dem umgebenden Kontext in die Funktion importieren. Beim Aufruf der Closure stehen diese Variablen später innerhalb der Closure immer noch mit denselben Werten zur Verfügung, auch wenn diese außerhalb der Closure gelöscht oder verändert wurden:

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!