Dieses Repository ist Teil des Refactoring.Guru-Projekts.
Es enthält PHP-Beispiele für alle klassischen GoF-Designmuster.
Jedes Muster enthält zwei Beispiele:
Konzeptionelle Beispiele zeigen die interne Struktur von Mustern, einschließlich detaillierter Kommentare.
Beispiele aus der realen Welt zeigen, wie Muster in realen PHP-Anwendungen verwendet werden können.
Für diese Beispiele ist PHP 7.3 und höher erforderlich, obwohl sie problemlos in ältere PHP-Versionen repliziert werden können.
Diese Version bietet explizite Argument- und Rückgabetypdeklarationen, die dabei helfen, die Funktionen einiger Muster besser zu verstehen, die in dynamisch typisierter Sprache nicht sehr offensichtlich sind.
Alle Beispiele können über die Befehlszeile mit der ausführbaren PHP-Datei wie folgt gestartet werden:
php src/Path-to-example/index.php
Für die beste Erfahrung empfehle ich die Arbeit mit Beispielen mit diesen IDEs:
Ich habe keine guten Ideen für die reale Verwendung dieser beiden in PHP-Apps. Wenn Sie sie in Ihrem Projekt verwendet haben, können Sie mir gerne eine Idee vorschlagen, indem Sie ein Problem posten.
Client bedeutet Client von Klassen, die als Teil eines Musters definiert sind und lediglich ein Aufrufer der angegebenen Methoden oder ein Benutzer der angegebenen Klassen sind. Mit anderen Worten: Es handelt sich um den Teil des Codes Ihrer Anwendung, der die Klassen des Musters verwendet.
Schauen Sie sich zunächst das konzeptionelle Beispiel an. Dort finden Sie detaillierte Beschreibungen jeder Klasse in einem Muster, ihrer Rolle und ihrer Verbindung zu anderen Klassen.
Ich freue mich über jede Hilfe, sei es die einfache Korrektur eines Tippfehlers oder ein ganz neues Beispiel. Machen Sie einfach einen Fork, nehmen Sie Ihre Änderung vor und senden Sie eine Pull-Anfrage.
Hier ist ein Styleguide, der Ihnen helfen kann, Ihre Änderungen mit dem restlichen Projektcode konsistent zu halten:
Der gesamte Code sollte dem PSR2-Codierungs-Styleguide entsprechen
Versuchen Sie, den Code beim 80. Zeichen fest umzubrechen. Es hilft, den Code ohne Bildlaufleisten auf der Website aufzulisten.
Beispiele sollten der folgenden Namespace-Konvention entsprechen: RefactoringGuru{Mustername}{Beispielname}. Zum Beispiel:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
Ziel ist es, den gesamten Code in einer Datei unterzubringen. Ja, mir ist klar, dass es in der Produktion nicht so sein sollte. Es hilft jedoch, Beispiele besser zu verstehen, da der gesamte Code auf einen Bildschirm passt.
Kommentare können Sprach-Tags enthalten oder auch nicht, wie zum Beispiel diese:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
Diese Notation trägt dazu bei, dass der Code an einem Ort bleibt, während die Website gleichzeitig separate Versionen von Beispielen für alle aufgelisteten Sprachen generieren kann. Haben Sie keine Angst und ignorieren Sie den nicht-englischen Teil solcher Kommentare. Wenn Sie an einem Kommentar wie diesem etwas ändern möchten, tun Sie es einfach. Selbst wenn Sie es falsch machen, sagen wir Ihnen während des Pull Requests, wie Sie es beheben können.
Dieses Werk ist unter der Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License lizenziert.
Autoren: Alexander Shvets (@neochief) und Alexey Pyltsyn (@lex111)