Mas espera ai... o que é singleton? Pesquisei no google e vi que Singleto é um whisky.....
Sério um WHISKY! Eita, em um blog assim eu vou ficar falando sobre bebidas?
Não! Na verdade SINGLETON é uma palavra muito falada atualmente no desenvolvimento mas muitas pessoas não sabem nem a que se refere e as vezes até falam por ai Oo'...
Singleton é um padrão de desenvolvimento(os famosos Design Patterns) . Sabe? assim como o MVC, DAO... Lógico que não é igual ao MVC,DAO pois não é possível que alguém tenha criado o mesmo padrão duas vezes não acham? O Singleton é na verdade bem específico pois sua proposta é para garantir a existência de uma única instância de uma classe, permitindo um acesso global a esta instância.
Quando é necessário utilizar?
Muitos projetos necessitam de classes que sejam instanciadas apenas uma vez, por exemplo:
Classes de conexão com banco de dados, entre outras. veja um exemplo prático do php.net (fique ligado[a] nos comentários do código)
<?php- class Exemplo{
- // Guarda uma instância da classe
- private static $instance;
- // Um construtor privado; previne a criação direta do objeto
- private function __construct()
- {
- echo 'Sou um construtor';
- }
- // O método singleton
- public static function singleton()
- {
- if (!isset(self::$instance)) {
- $c = __CLASS__;
- self::$instance = new $c;
- }
- return self::$instance;
- }
- // Método exemplo
- public function latir()
- {
- echo 'Au!';
- }
- // Previne que o usuário clone a instância
- public function __clone()
- {
- trigger_error('Clone is not allowed.', E_USER_ERROR);
- }
- }
- ?>
Isso permite que uma instância única de Exemplo seja recuperada.
<?php- // Isso falharia porque o construtor é privado
- $test = new Exemplo;
- // Isso sempre vai recuperar uma instância da classe
- $test = Exemplo::singleton();
- $test->latir();
- // Isso irá emitir um E_USER_ERROR.
- $test_clone = clone $test;
- ?>
Conclusão
A utilização do pattern singleton permite uma facilidade maior no controle das classes que não devem ser instanciadas mais do que uma vez.
Normalmente uma classe singleton é utilizada em conjunto com uma classe factory que em breve eu irei explicar.
Normalmente uma classe singleton é utilizada em conjunto com uma classe factory que em breve eu irei explicar.
s-i-g-a-m-e @pv_fusion