Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
March 30, 2022 01:25 am GMT

Padres de Projeto em PHP: Singleton

Design Patterns, os padres de projetos, so extremamente teis e eficazes na escalabilidade, robustez e compreenso do cdigo. Embora seja um nome que nos leve a pensar em complexidade, o principal intuito de um padro de projeto resolver um problema. Foram formulados pela to estimada Gang of Four e so utilizados em larga escala. Pense neles como uma soluo para situaes onde voc provavelmente reinventaria a roda se no os conhecesse.

O padro de projeto que vou apresentar hoje um padro criacional (uma das trs categoria de padres de projeto): o Singleton

Tanto o conceito como a aplicabilidade do Singleton so simples. O Singleton preza que apenas uma instncia seja retornada. Isso possui diversa aplicabilidades. Pense numa classe com funcionalidades genricas que utilizada em vrios pontos de sua aplicao, mas que no possui um estado. Seria uma boa ideia utilizar um Singleton para essa classe, certo?

Vou explicar por etapas a construo dessa classe para objetos solitrios.

Vamos voltar ao anime Naruto e fingir que o nico Uchiha existente realmente o Sasuke (embora saibamos que tenha mais Uchihas no mundo do que Almeidas). Logo s existe um Uchiha na face da terra.

final class Uchiha {}

Ao declarar a palavra-chave final no inicio da classe estamos dizendo que essa classe no pode ser herdada, isto : no pode gerar classes filhas. isso mesmo, vamos fingir que o Sasuke estril tambm (pobre Sasuke).

Um dos modos efetivos de bloquear a instanciao de uma classe impedir sua proliferao no deixando que o metodo construtor seja invocado... e no, no adianta deixar de definir um construtor, a classe faz isso automaticamente. Uma tcnica que podemos aplicar utilizando o modificador de acesso private em oposio ao public, em nosso construtor:

final class Uchiha {    private function __construct()    {    }}

Outra situao que precisamos impedir a clonagem do nosso Uchiha (afinal s se clona Senjus no anime). A tcnica a mesma: impedir acesso externo ao mtodo especial.

final class Uchiha {    private function __construct()    {    }    private function __clone()    {    }}

Um cenrio mais atpico: existe um mtodo especial no PHP chamado o __wakeup, ele permite a completa construo de objetos desserializados (o Google seu amigo). Vamos prevenir essa arte de Orochimaru tornando tambm o mtodo __wakeup privado

final class Uchiha {    private function __construct()    {    }    private function __clone()    {    }    private function __wakeup()    {    }}

Por fim, vamos criar um mtodo que permite retornar o nosso Uchiha.

final class Uchiha {    // Declaramos o atributo a ser retornado    private static ?Uchiha $instance    private function __construct()    {    }    private function __clone()    {    }    private function __wakeup()    {    }    // Mtodo para obter a instncia    public function getInstance()    {       // Garantimos que somente uma instncia seja criada       if (!isset(self::$instance)) {           self::$instance = new static();       }       // Por fim retornamos a instncia       return self::$instance;    }}// criamos nosso objeto Singleton$sasuke = Uchiha::getInstance();

Por hoje s pessoal.
At a prxima!


Original Link: https://dev.to/kaetaen/padroes-de-projeto-em-php-singleton-1eel

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To