Afinal, pra server o Singleton?
Olá a todos.
Tenho uma dúvida que está me embaralhando a cabeça.
Estou aprendendo (tentando aprender) Singleton.
Quando leio na internet sobre o padrão Singleton, todos falam que apenas uma instância daquele determinado objeto vai estar disponível em TODA a aplicação.
Certo, então, por exemplo, se eu possuir uma conexão de banco de dados usando singleton, essa mesma conexão vai ser usada na minha aplicação, certo?
Para falar a verdade agora não sei...
Porque, afinal, para um objeto refenciando uma conexão com o banco de dados retornar sempre a mesma conexão, este objeto deveria ser statefull, certo? Pois ele deveria armazenar na memória o valor da conexão em uma variável estática e sempre retornar a mesma conexão, sem tentar abrir outra, MESMO QUE O USUÁRIO MUDE DE PÁGINA, O QUE OCASIONARIA O RECARREGAMENTO DA MESMA, certo?
Então para testar isso, incrementei uma classe de teste encontrei na net para ver se eu conseguia verificar essa característica (tirei o exemplo de .http://rubsphp.blogs...09/12/self.html)
A idéia é que, toda vez que eu recarregue a página, um valor seja incrementado na classe, mas não é o que está ocorrendo.
eis o código:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
class teste_singleton {
private static $instancia = null;
private static $numero;
/**
* Construtor privado
*/
private function __construct() {
self::$numero++;
}
/**
* Nao permitir clonagem
*/
public function __clone() {
throw new Exception('Singleton nao permite clonagem');
}
/**
* Devolve uma instancia singleton da classe corrente
* @return teste_singleton
*/
public static function get_instancia() {
if (self::$instancia === null) {
self::$instancia = new self();
}
return self::$instancia;
}
public function getNumero(){
return self::$numero;
}
}
echo teste_singleton::get_instancia()->getNumero();
?>
Minha pergunta é:
Onde estou errando? Ou fui eu que não entendi para que server o singleton?
Espero que possam me ajudar.
Grato.
Discussão (8)
Carregando comentários...