Padrões com PHP — Singleton

Henrique Matos
3 min readJul 12, 2020

--

Hoje iremos começar a ver alguns padrões que ajudam bastante no desenvolvimento do seu software. Esses padrões são independentes de linguagem, ou seja, não são criados apenas para atender demandas no desenvolvimento usando a linguagem PHP.

A implementação desses padrões não obrigatórios no di-a-dia (mesmo que alguns deles você já aplica sem mesmo perceber), mas fica a dica: Se quiser melhorar a escrita do seu código, comece a estudar e usá-los em projetos dentro da empresa que presta serviço ou nos seus próprios projetos. Não vou citar todos os padrões mas pretendo escrever pelo menos sobre uns 4 ou 5 que mais uso e me aparece com mais frequência nos projetos.

O resumo do resumo padrões começaram a tomar forma em 1995 quando foi publicado o livro Design Patterns: Elements of Reusable Object-Oriented Software escrito por quatro pessoas, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Esses quatro autores mais tarde e até hoje começaram a ser conhecido como GOF (Gang of Four) que em português seria "Gangue dos Quatro". Para quem pesquisar a fundo vai ver que padrões foram propostos bem antes por Kent Beck e Ward Cunningham em 1987.

Os padrões que pretendo escrever sobre são:

  • Singleton
  • Memento
  • Observer
  • Prototype
  • Decorator

Não sei se será nessa ordem mas vão ser pelos menos esses, pois existem muitos outros.

Bom, vamos começar vendo uma situação onde precisaríamos usar o singleton. Não adianta sair usando se não sabe pra que serve e nem em que momento aplicar.

Imagine que dentro de um sistema você precise criar pequenos arquivos de texto com informações que mais tarde vai precisar, pode ser um log por exemplo. E vamos dizer que do início da função até o fim da mesma você precise gravar o passo a passo. Nesse caso penso que poderíamos escrever uma classe para gravar esses arquivos porém não precisamos criar uma instancia de classe nova a cada arquivo que precisamos criar, isso seria totalmente sem necessidade e um tanto feio. Nesse caso é onde usamos o singleton que nos fornece uma maneira de com apenas uma única instancia dessa classe eu faça o que é preciso (nesse caso criar os nossos arquivos).

Vamos escrever nossa classe como abaixo.

A única coisa que quero chamar a atenção é para as linhas:

5 - Onde temos uma variável para guardar nossa instância.

20 - Onde temos a implementação do nosso método, onde nada mais faz do que apenas verificar se $instance está vazio e se estiver quer dizer que essa classe não foi ainda instanciada. Se já foi instanciada, então apenas retorna a instancia que já está na memória.

A utilização dessa solução segue abaixo:

Como podemos ver na linha 5 e 6 apenas obtemos a instancia e na linha 8 para verificarmos se de fato é a mesma instancia, fazemos um IF. Logo a seguir nas linhas 12 e 13 fazemos a utilização de nossa classe criando dois arquivos a partir de uma única instância e cada uma com seus respectivos dados.

Por fim, espero que tenham gostado desse conteúdo e como disse no início, pretendo trazer mais alguns padrões que no meu caso foram os que mais apareceram. Para quem quiser seguir estudo com um bom guia, indico esse doc https://designpatternsphp.readthedocs.io/en/latest/README.html.

Um abraço!!

--

--