Em programação orientada por objetos, o padrão Singleton é um padrão de projecto que visa restringir a criação de objetos de uma determinada classe a uma única instância, garantindo que esta instância seja globalmente acessível. Isso significa que, ao utilizar este padrão, uma classe terá apenas uma única instância, que poderá ser acedida por todo o sistema.
O padrão Singleton é útil em situações em que é necessário ter certeza de que somente uma única instância de uma determinada classe é criada, como por exemplo, para ligação a bases de dados, logs, configurações, cache, entre outras.
O Singleton geralmente é implementado através de uma classe que contém um método estático para criar ou retornar a instância única dessa classe. Esse método, que é normalmente chamado “getInstance()”, é responsável por verificar se já existe uma instância da classe e retorná-la, ou criar uma nova instância se ela ainda não existir.
Exemplo de implementação do padrão Singleton em PHP:
class Singleton {
private static $instance;
private function __construct() {
// Impedir instâncias fora da classe
}
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new Singleton();
}
return self::$instance;
}
public function doSomething() {
// Fazer algo
}
}
Neste exemplo, a classe Singleton tem um construtor privado, o que impede que instâncias sejam criadas fora da classe. Além disso, a classe possui um método estático “getInstance()”, que é responsável por retornar a única instância da classe. O método verifica se a instância já existe e, caso contrário, cria uma nova instância da classe.
Para utilizar a classe Singleton, basta chamar o método estático “getInstance()” e utilizar a instância retornada para realizar as operações necessárias:
$singleton = Singleton::getInstance();
$singleton->doSomething();
Neste caso, a variável $singleton receberá a única instância da classe Singleton e o método “doSomething()” poderá ser chamado para realizar alguma operação.
![](https://i0.wp.com/bitsebytes.pt/wp-content/uploads/2023/03/CC-2018-970x90-1.png?ssl=1)