Ce référentiel fait partie du projet Refactoring.Guru.
Il contient des exemples PHP pour tous les modèles de conception GoF classiques.
Chaque modèle comprend deux exemples :
Des exemples conceptuels montrent la structure interne des modèles, y compris des commentaires détaillés.
Des exemples réels montrent comment les modèles peuvent être utilisés dans des applications PHP réelles.
Ces exemples nécessitent PHP 7.3 et versions ultérieures, bien qu'ils puissent être facilement répliqués dans les anciennes versions de PHP.
Cette version fournit des déclarations explicites d'arguments et de types de retour, qui aident à mieux comprendre les fonctionnalités de certains modèles qui ne sont pas très évidentes dans un langage typé dynamiquement.
Tous les exemples peuvent être lancés via la ligne de commande, en utilisant l'exécutable PHP comme suit :
php src/Path-to-example/index.php
Pour une expérience optimale, je recommande de travailler avec des exemples avec ces IDE :
Je suis à court d'idées décentes pour les utilisations réelles de ces deux applications PHP. Si vous les avez utilisés dans votre projet, n'hésitez pas à me suggérer une idée en publiant un problème.
Client signifie client de classes, défini dans le cadre d'un modèle , qui est simplement un appelant des méthodes données ou un utilisateur des classes données. En d’autres termes, c’est la partie du code de votre application qui utilise les classes du modèle.
Jetez d’abord un œil à l’exemple conceptuel. Vous y trouverez des descriptions détaillées de chaque classe dans un modèle, son rôle et sa connexion avec d'autres classes.
J'apprécie toute aide, qu'il s'agisse d'une simple correction d'une faute de frappe ou d'un tout nouvel exemple. Créez simplement un fork, effectuez votre modification et soumettez une pull request.
Voici un guide de style qui pourrait vous aider à maintenir la cohérence de vos modifications avec le reste du code du projet :
Tout le code doit correspondre au guide de style de codage PSR2
Essayez d'envelopper le code au caractère 80e. Il est utile de répertorier le code sur le site Web sans barres de défilement.
Les exemples doivent correspondre à la convention d'espace de noms suivante : RefactoringGuru{pattern-name}{example-name}. Par exemple:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
Essayez de mettre tout le code dans un seul fichier. Oui, je me rends compte que ce n’est pas ainsi que cela est censé se dérouler en production. Cependant, cela aide les gens à mieux comprendre les exemples, puisque tout le code tient sur un seul écran.
Les commentaires peuvent contenir ou non des balises de langue, telles que celle-ci :
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
Cette notation permet de conserver le code au même endroit tout en permettant au site Web de générer des versions distinctes d'exemples pour toutes les langues répertoriées. N'ayez pas peur et ignorez la partie non anglaise de ces commentaires. Si vous souhaitez modifier quelque chose dans un commentaire comme celui-ci, faites-le. Même si vous le faites mal, nous vous expliquerons comment y remédier lors de la Pull Request.
Ce travail est sous licence internationale Creative Commons Attribution-NonCommercial-NoDerivatives 4.0.
Auteurs : Alexander Shvets (@neochief) et Alexey Pyltsyn (@lex111)