Этот репозиторий является частью проекта Refactoring.Guru.
Он содержит примеры PHP для всех классических шаблонов проектирования GoF.
Каждый шаблон включает в себя два примера:
Концептуальные примеры показывают внутреннюю структуру шаблонов, включая подробные комментарии.
Примеры из реального мира показывают, как шаблоны можно использовать в реальных PHP-приложениях.
Для этих примеров требуется PHP 7.3 и новее, хотя их можно легко воспроизвести в более старых версиях PHP.
Эта версия предоставляет явные объявления аргументов и возвращаемых типов, которые помогают лучше понять некоторые особенности шаблонов, которые не очень очевидны в динамически типизированном языке.
Все примеры можно запустить через командную строку, используя исполняемый файл PHP следующим образом:
php src/Path-to-example/index.php
Для получения наилучших результатов я рекомендую работать с примерами в следующих IDE:
У меня нет достойных идей относительно реального использования этих двух в приложениях PHP. Если вы использовали их в своем проекте, не стесняйтесь предложить мне идею, опубликовав проблему.
Клиент означает клиент классов, определенный как часть шаблона , который является просто вызывающим объектом данных методов или пользователем данных классов. Другими словами, это часть кода вашего приложения, которая использует классы шаблона.
Сначала взгляните на концептуальный пример. Там вы найдете подробное описание каждого класса в шаблоне, его роль и связь с другими классами.
Я ценю любую помощь, будь то простое исправление опечатки или совершенно новый пример. Просто сделайте форк, внесите изменения и отправьте запрос на включение.
Вот руководство по стилю, которое может помочь вам обеспечить согласованность ваших изменений с остальной частью кода проекта:
Весь код должен соответствовать руководству по стилю кодирования PSR2.
Попробуйте жестко обернуть код на 80-й символ. Это помогает разместить код на сайте без полос прокрутки.
Примеры должны соответствовать следующему соглашению о пространстве имен: RefactoringGuru{имя-шаблона}{имя-примера}. Например:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
Стремитесь поместить весь код в один файл. Да, я понимаю, что на производстве это не так. Однако это помогает людям лучше понимать примеры, поскольку весь код умещается на одном экране.
Комментарии могут содержать или не содержать языковые теги, например:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
Эта нотация помогает хранить код в одном месте, позволяя веб-сайту генерировать отдельные версии примеров для всех перечисленных языков. Не бойтесь и игнорируйте неанглоязычную часть таких комментариев. Если вы хотите что-то изменить в таком комментарии, просто сделайте это. Даже если вы сделаете это неправильно, мы расскажем вам, как это исправить во время запроса на включение.
Эта работа распространяется по международной лицензии Creative Commons Attribution-NonCommercial-NoDerivatives 4.0.
Авторы: Александр Швец (@neochief) и Алексей Пыльцын (@lex111)