Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Tutorial: Vorwort zu PHP-Designmustern

PHP-Tutorial: Vorwort zu PHP-Designmustern

黄舟
Freigeben: 2023-03-04 08:30:01
Original
1154 Leute haben es durchsucht

Wenn Sie ständig versuchen, neue Funktionen Ihrer Anwendungen zu entdecken, stellen Sie dann fest, dass die von Ihnen vorgeschlagenen Lösungen einigen Dingen, die Sie zuvor implementiert haben, so ähnlich sind? Wenn Sie Programmierer sind (auch wenn Sie erst seit Kurzem damit anfangen), haben Sie wahrscheinlich mit „Ja“ geantwortet. Es sieht so aus, als würden Sie alten Code verwenden, um neu entdeckte Probleme während der Softwareentwicklung zu lösen. Möglicherweise haben Sie erkannt, dass Ihre Lösung ein grundlegendes Prinzip ist, eine Methode, die nicht nur von Ihnen, sondern von allen professionellen Entwicklern häufig wiederholt werden kann.

Tatsächlich treten viele Programmierprobleme immer wieder auf, und es sind viele grundlegende Methoden (oder Entwurfsmuster) zur Lösung dieser Probleme entstanden. Ein Designmuster ist eine Vorlage, die Ihnen zeigt, wie Sie Ihren Code mithilfe authentischer und zuverlässiger Designs organisieren.

Geschichte der Designmuster

Der Begriff „Designmuster“ wurde ursprünglich im Bereich der Architektur geprägt. In seinem 1977 erschienenen Buch „A Pattern Language: Towns/Building/Construction“ beschreibt Christopher Alexander einige häufige architektonische Designprobleme und erklärt, wie man diese Sammlung bestehender, bekannter Muster nutzen kann, um neue und effektive Designs zu entwickeln. Alexanders Perspektive lässt sich gut auf die Softwareentwicklung übertragen, und es besteht ein langfristiger Konsens darüber, vorhandene Komponenten zum Aufbau neuer Lösungen zu nutzen.

Alle Entwurfsmuster haben einige gemeinsame Merkmale: einen Namen, eine Problemstellung und eine Lösung.

Die Identifizierung eines Entwurfsmusters ist wichtig, da es anderen Programmierern ermöglicht, den Zweck Ihres Codes sofort zu verstehen, ohne sich zu sehr damit befassen zu müssen (zumindest sind Programmierer durch diese Identifizierung mit dem Muster vertraut).

Die Problembeschreibung dient dazu, den Anwendungsbereich dieses Musters zu veranschaulichen. ?

Die Lösung beschreibt die Ausführung dieses Modells. Eine gute Diskussion eines Entwurfsmusters sollte die Vor- und Nachteile der Verwendung des Modells abdecken.

Ein Muster ist eine effektive Möglichkeit, ein bestimmtes Problem zu lösen. Ein Entwurfsmuster ist keine Bibliothek (eine Codebibliothek, die direkt in Ihr Projekt eingebunden und verwendet werden kann), sondern eine Vorlage zum Organisieren Ihres Codes. Tatsächlich gibt es viele Unterschiede bei der Anwendung einer Codebasis und eines Entwurfsmusters.

Ein Hemd, das Sie beispielsweise in einem Geschäft kaufen, ist eine Codebibliothek. Farbe, Stil und Größe werden vom Designer und Hersteller bestimmt, aber es entspricht Ihren Anforderungen.

Wenn es im Geschäft jedoch nichts gibt, das zu Ihnen passt, können Sie Ihr eigenes Hemd entwerfen (Form entwerfen, Stoff auswählen und zusammenschneidern). Aber wenn Sie kein Schneider sind, fällt es Ihnen möglicherweise leicht, ein passendes Muster zu finden und dann Ihr eigenes Hemd nach diesem Muster zu entwerfen. Mithilfe eines Modells können Sie in kürzerer Zeit ein professionell gestaltetes Hemd erhalten.

Zurück zur Diskussion von Software: Eine Datenextraktionsschicht oder ein CMS (Content Management System) ist eine Bibliothek – sie wurde zuvor entworfen und codiert. Wenn sie Ihren Anforderungen genau entspricht, ist sie eine gute Wahl. Aber wenn Sie dies lesen, haben Sie vielleicht festgestellt, dass Standardlösungen nicht immer für Sie funktionieren. Da Sie nun wissen, was Sie wollen und es erreichen können, brauchen Sie nur noch ein Modell, das Sie anleitet.

Ein letzter Gedanke: Genau wie ein Schneidermodell ist ein Design für sich genommen wenig nützlich. Schließlich kann man kein Kleidungsmodell tragen, es ist einfach aus dünnem Papier zusammengebastelt. Ebenso ist ein Software-Designmodell nur ein Leitfaden. Es muss speziell auf die Eigenschaften und Anforderungen der Programmiersprache und Ihrer Anwendung zugeschnitten sein.

Ziele dieses Buches

Der Zweck dieses Buches besteht nicht darin, verschiedene Kategorien von Software-Designmustern umfassend vorzustellen oder ein neues Designmuster oder eine neue Terminologie zu entwickeln, sondern die Einführung hervorzuheben Einige gut -bekannte vorhandene Designmuster. Das Besondere an diesem Buch ist, dass es einige Designmuster vorstellt, die meiner Meinung nach bei der Entwicklung dynamischer WEB-Anwendungen hilfreich sind, und zeigt, wie diese Designmuster in PHP implementiert werden.

Objektorientierte Programmierung OOP

Ein Vorteil dieses Buches ist, dass alle Standpunkte auf OOP, einem sehr natürlichen Entwurfsmuster, basieren und mithilfe von OOP implementiert werden.

Wenn Sie mit OOP nicht vertraut sind, gibt es viele verwandte Ressourcen (Bücher, Websites, Zeitschriften, Kurse usw.), die Ihnen helfen, es besser zu verstehen. Die meisten OOP-Literatur lobt seine Vorteile – Code-Wiederverwendung, Code-Robustheit, Code-Kapselung, Polymorphismus und Erweiterbarkeit, die alle ebenfalls sehr wichtig und nützlich sind. Ich denke jedoch, dass der Hauptvorteil von OOP darin besteht, dass es Sie dazu ermutigt, Probleme selbst in handhabbare Module zu zerlegen. Klares Design und klare Implementierung, aufgeteilt in kleine Module, damit Ihr Code gründlicher getestet werden kann und einfacher zu verstehen und zu warten ist.

Anforderungen an Lesefähigkeiten

In diesem Buch wird davon ausgegangen, dass Sie PHP bereits fließend verwenden können. Insbesondere wird in diesem Buch davon ausgegangen, dass Sie bereits über praktische Kenntnisse in PHP und der PHP-Syntax verfügen und die Grundprinzipien der Ausführung von PHP-Code mithilfe von OOP verstehen. Dieses Buch stellt weder eine Einführung in die PHP-Programmierung dar, noch ist es dazu gedacht, die OOP-Programmierung in PHP einzuführen.

Da nicht alle OOP-Entwickler die gleiche Terminologie verwenden, werde ich bei der Einführung neuer Begriffe diese im Text oder in der Symbolleiste definieren.

PHP4 und PHP5

Als ich dieses Buch schreibe, ist PHP5 schon seit einiger Zeit veröffentlicht, wurde aber von der öffentlichen Gemeinschaft noch nicht weit verbreitet. In meiner eigenen Arbeit habe ich damit begonnen, neue Anwendungsentwicklungsarbeiten in die PHP5.0.3-Umgebung zu migrieren, und bisher bin ich froh, dass PHP5 eine gute Abwärtskompatibilität mit PHP4-Code aufweist und gleichzeitig ein objektorientiertes Modell ist eine der bedeutendsten neuen Funktionen von PHP5.

Es gibt viele gute Artikel und Anleitungen, die sich mit den subtilen Unterschieden zwischen Objektmodellen verschiedener PHP-Versionen befassen. Aber in einfachen Worten bietet PHP5:

Objekthandle (wird weiter unten erklärt, siehe Kapitel 2: Der Wert des Objektmodells für weitere Details)?

Besserer Konstruktor ( Einheitlicher Name, Nr Änderungen erlaubt)?

Destruktor?

Sichtbarkeit (öffentlich, geschützt, privat für Methoden und Eigenschaften)?

Ausnahmebehandlung (Sie können die neue Syntax try{}catch auswählen {} Fehler auslösen)?

Statische Klasse?

Bild (Klassen, Methoden, Eigenschaften dynamisch prüfen)?

Typversteckung ?

PHP5 auch bietet einige weitere obskure Funktionen:

Neue magische Methoden?

__get() und __set() ermöglichen Ihnen die Steuerung des Variablenzugriffs

__call() ermöglicht Ihnen das dynamische Abfangen aller Attribute des aufgerufenen Objekts.

__sleep() und __wakeup() ermöglichen es Ihnen, die Serialisierungsmethode zu überladen.

__toString() ermöglicht Ihnen zu steuern, wie eine Zeichenfolge zur Beschreibung des Objekts selbst verwendet wird.

Autoloading (erlaubt dem Benutzer, die Klasse automatisch zu laden, wenn sie zum ersten Mal abgelehnt wird)?

Final (erlaubt nicht, dass diese Methode oder eine Klasse durch ihre Unterklassen überladen wird)?

Objekthandle

Die beste Funktion von PHP5 ist die Verwendung von Handles zum Definieren von Klassen, ähnlich einem Datei- oder Datenbankhandle. Die Verwendung eines Objekts in einer PHP-Funktion kopiert das Objekt nicht mehr implizit, sondern stellt ein Operationshandle bereit.

Um den Unterschied deutlicher zu sehen, betrachten wir die folgenden zwei Beispiele:

// PHP4-Klasse
Klasse BeispielP1 {
var $foo;
Funktion setFoo($ foo) {
$this->foo = $foo`;
}
function getFoo() {
return $this->foo;
}
}
function changeExample($param) {
$param->setFoo('blah');
return $param->getFoo();
}
$obj = new BeispielP1;
$obj->setFoo('bar');
echo $obj->getFoo(); // bar
echo ChangeExample($obj
echo $obj- >getFoo(); // bar

In PHP4 ist die Variable $param in der Funktion changeExample() eine Kopie von $obj, daher ändert diese Funktion $foo nicht im ursprünglichen Objektwert dass die endgültige Ausgabe von $obj->getFoo() „bar“ ist.

Da $obj in PHP5 nur ein Objekthandle in der Funktion ist, wirkt sich dieselbe Funktion changeExample() wirklich auf das ursprüngliche Objekt aus. Mit anderen Worten: Bei Verwendung von Handles ist kein Kopieren erforderlich und $param ist die $obj-Instanz.

// PHP5-Klasse
Klasse BeispielP2 {
protected $foo;
function setFoo($foo) {
$this->foo = $foo;
}
function getFoo() {
return $this->foo;
}
}
$obj = new BeispielP2;
$obj->setFoo('bar') ;
echo $obj->getFoo(); // bar
echo ChangeExample($obj); //blah
echo $obj->getFoo(); // WICHTIG, erzeugt blah

Dieses Problem wird komplizierter, wenn Sie die Variable $this in anderen Objekten oder im integrierten Konstruktor dieses Objekts (__construct) verwenden.

Es stellt sich heraus, dass Sie in PHP4 fast immer Folgendes tun müssen:

Ein Referenzobjekt erstellen, wie dieses $obj=?& new class;

Die Referenz aufrufen ein Funktionsobjekt, z. B. function func(?&$obj_param){}

Erfassen Sie Objekte durch Referenzieren von Funktionen, z. B. function? &some_func(){} $return_obj=&some_funct()

In Tatsächlich gibt es Situationen, in denen Sie auch das Originalobjekt kopieren müssen. In meinem PHP4-Code kommentiere ich alle nicht referenzierten Objektaufgaben wie das Kopieren eines expliziten Objekts immer deutlich. Auf lange Sicht kann ein so kurzer Kommentar die Kopfschmerzen für jeden, der Ihren Code verwaltet, erheblich verringern (Anmerkung des Übersetzers: Solcher Code ist sehr wartbar). Das damit verbundene Wissen über Referenzübergabe durch Wert, Objekthandle und Objektkopie wird in Kapitel 2 „Der Wert von Objektmustern“ ausführlich erläutert.

Obwohl ich persönlich PHP5 für die Entwicklung bevorzuge, bin ich der Meinung, dass PHP4 noch lange von uns verwendet wird und bestehende öffentlich veröffentlichte Projekte weiterhin PHP4 unterstützen werden. Daher bietet dieses Buch die gleiche Unterstützung für beide PHP-Versionen. Beispielcodes für PHP4- und PHP5-Versionen werden so weit wie möglich bereitgestellt. In jedem Kapitel wird jeder Codeblock (der in verschiedenen PHP-Versionen geändert wurde) mit entsprechenden Kommentaren versehen, um die Änderungen anzuzeigen, z. B. //php4 und //php5.

Bibliographie und andere Ressourcen

Hier gibt es viele verwandte Nachschlagewerke, die Ihnen helfen, Designmuster besser zu erlernen. Die „Bibeln“ (Übersetzung des Übersetzers: die besten Bücher) der Designmuster sind Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides (deren bahnbrechendes Werk oft als „Gang of Four“, abgekürzt als „GOF“ bezeichnet wird). Es handelt sich um „Designmuster: Prinzipien der wiederverwendbaren objektorientierten Softwareentwicklung“, das im Namen von vier von ihnen geschrieben wurde.

In Bezug auf „Entwurfsmuster“ ist „Patterns of Enterprise Application Architecture“ (Übersetzung des Übersetzers: Enterprise Application Architecture Model) von Martin Fowler das zweitnützlichste Buch zu Entwurfsmustern für PHP-Webanwendungen. Während das Buch von GOF alle allgemeinen Designmuster enthält, stellt Fowler in seinem Buch viele Designmuster speziell für die Entwicklung von Webanwendungen im Detail vor.

Darüber hinaus bieten viele Websites umfangreiche Ressourcen zu Designmustern. Eine besonders typische Website ist die Portland Model Library (http://cz.com/por/).

Eine weitere Website über PHP-Designmuster ist phpPatterns, und die Online-Adresse lautet http://www.phppatterns.com.

Danke

Ich bin meinem Chef sehr dankbar, denn meine Aufgaben und Verantwortlichkeiten ermöglichen es mir, einen Teil meiner Zeit in diesem für mich interessanten Bereich zu verbringen, und ich bin auch dankbar Er hat mir sein Wissen vermittelt und die Erfahrung hat mir das Selbstvertrauen gegeben, dieses Buch zu schreiben.

Eine weitere Quelle für Inspiration, Ideen und Erfahrungen ist für mich das Forum bei SitePoint (http://www.sitepoint.com). Insbesondere die Mitwirkenden, die regelmäßig zum Advanced PHP Forum gehen, verfügen über einen großen Wissens- und Erfahrungsschatz und sind die großzügigste Gruppe von Menschen, die ich online gefunden habe. Über diese Ressourcen (Anmerkung des Übersetzers: SitePoint-Site) habe ich mich bei SimpleTest (http://simpletest.sf.net), WACT (http://wact.sf.net) und vielen anderen angemeldet, die meiner Meinung nach unbezahlbar sind. PHP-Projekt. Ich hoffe, dass SitePoint auch in den kommenden Jahren eine reichhaltige Ressource für PHP-Entwickler sein wird.

Dieses Buch wäre ohne die Beiträge und erheblichen Bemühungen des PHP-Entwicklungsteams natürlich nicht möglich. Denn sie haben eine solche Sprache entwickelt, die einfach zu verwenden, leicht zu erlernen, vielseitig und sehr gut für die Entwicklung von WEB-Anwendungen geeignet ist.

Abschließend möchte ich mich bei Marco Tabini und allen bei php|architect bedanken. Dieses Magazin (Anmerkung des Übersetzers: php|architect) ist zur Quelle vieler verschiedener PHP-Themen geworden, und diese Themen werden von professionellen Entwicklern veröffentlicht. Auch die von Macro und Co. veranstalteten Konferenzen sind ziemlich gut.

Das Obige ist der Inhalt des Vorworts des PHP-Tutorials: PHP-Designmuster. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage