Este repositório faz parte do projeto Refactoring.Guru.
Ele contém exemplos de PHP para todos os padrões de design clássicos do GoF.
Cada padrão inclui dois exemplos:
Exemplos conceituais mostram a estrutura interna dos padrões, incluindo comentários detalhados.
Exemplos do mundo real mostram como os padrões podem ser usados em aplicações PHP do mundo real.
Esses exemplos requerem PHP 7.3 e mais recentes, embora possam ser facilmente replicados em versões mais antigas do PHP.
Esta versão fornece argumentos explícitos e declarações de tipo de retorno, que ajudam a entender melhor alguns recursos de padrões que não são muito óbvios em linguagem de tipo dinâmico.
Todos os exemplos podem ser iniciados através da linha de comando, usando o executável PHP da seguinte forma:
php src/Path-to-example/index.php
Para obter a melhor experiência, recomendo trabalhar com exemplos com estes IDEs:
Estou sem ideias decentes para usos no mundo real desses dois em aplicativos PHP. Se você os utilizou em seu projeto, sinta-se à vontade para me sugerir uma ideia postando um Issue.
Cliente significa cliente de classes, definido como parte de um padrão , que é apenas um chamador de determinados métodos ou um usuário de determinadas classes. Em outras palavras, é a parte do código da sua aplicação que utiliza as classes do padrão.
Dê uma olhada no exemplo conceitual primeiro. Lá você encontrará descrições detalhadas de cada classe em um padrão, sua função e conexão com outras classes.
Agradeço qualquer ajuda, seja uma simples correção de um erro de digitação ou um exemplo totalmente novo. Basta fazer um fork, fazer sua alteração e enviar uma solicitação pull.
Aqui está um guia de estilo que pode ajudá-lo a manter suas alterações consistentes com o restante do código do projeto:
Todo o código deve corresponder ao guia de estilo de codificação PSR2
Tente encapsular o código no caractere 80. Ajuda listar o código no site sem barras de rolagem.
Os exemplos devem corresponder à seguinte convenção de namespace: RefactoringGuru{pattern-name}{example-name}. Por exemplo:
<?php
namespace RefactoringGuru FactoryMethod Example Buttons ;
class Button {
...
Procure colocar todo o código em um arquivo. Sim, percebo que não é assim que deveria ser feito na produção. Porém, ajuda as pessoas a entender melhor os exemplos, já que todo o código cabe em uma tela.
Os comentários podem ou não conter tags de idioma, como esta:
/**
* EN : All products families have the same varieties ( MacOS / Windows ) .
*
* This is a MacOS variant of a button .
*
* RU : Все семейства продуктов имеют одни и те же вариации ( MacOS / Windows ) .
*
* Это вариант кнопки под MacOS .
* /
Essa notação ajuda a manter o código em um só lugar, ao mesmo tempo que permite que o site gere versões separadas de exemplos para todos os idiomas listados. Não tenha medo e ignore a parte não inglesa de tais comentários. Se você quiser mudar algo em um comentário como este, basta fazê-lo. Mesmo se você fizer isso errado, diremos como consertar durante o Pull Request.
Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-NãoComercial-SemDerivações 4.0 Internacional.
Autores: Alexander Shvets (@neochief) e Alexey Pyltsyn (@lex111)