Ir para conteúdo



Design Pattern - Singleton


  • Por favor, faça o login para responder
4 respostas neste tópico

#1 filesgh

filesgh
  • Membros
  • 216 posts

Postado 26 December 2007 - 11:02 AM

Olá galera!

Ainda movido pelo espirito natalino, resolvi postar aqui um conceito bastante usado em desenvolvimento OO (orientado a objetos) tanto na linha desktop quanto web. O Padrão singleton é bem utilizado em conceitos simples de persistência tanto de dados quanto de conexões com o banco, etc.. Vamos lá..

O conceito singleton é utilizado para se instanciar uma unica vez uma determinada classe.. Ou seja, ao invés de se ter várias instanciações de uma determinada classe, você tem uma unica instancia definida no inicio.. Esse instancia é utilizada durante todo o processo de uso do sistema, ou enquanto a mesma não for expirada..

Temos como principal utilização o acesso ao banco.. Isso em alguns casos é um grande gargalo pois em cada uso do dito cujo em padrôes comuns, é feita uma nova conexão com o banco.. Se o mesmo nao estiver bem configurado ou se não houver uma estrutura muito boa do serviço, pode-se estourar o limite de conexões com grande facilidade.

Vamos ao bicho..

CÓDIGO

class Conexao{
  private static $instancia;
  private $db;
  private function __construct(){
  }

  public static function getConexao(){
    if(is_null(self::$instancia)){
       self::$instancia = new Conexao();
    }
    return $self::$instancia;
  }

  public function Conectar(){
     $mypdo = new PDO('mysql:host=localhost;port=3306;dbname=teste','root','senha123', array(PDO::ATTR_PERSISTENT => true));
     $this->db = $mypdo;
     return $this->db;
  }
}


Isso garante que se o objeto $instancia for nulo, ele será instanciado com o objeto $db ativo.

Faça a chamada da conexao para dentro de sua classe ativa usando a seguinte linha:
CÓDIGO

class Site extends App{

private $db;
private $login;

public function __construct($caminho){
    if(isset($_SESSION['login'])){
        $this->login = $_SESSION['login'];
    }
    $this->db = Conexao::getConexao()->Conectar();
}
.
.
.

}


Isso instanciará o objeto $db da classe conexao na sua classe Site ao qual será trabalhada!

Espero ter ajudado com esse tutorial muito teórico, mas de grande utilidade..

laugh.gif

Grande abraço e Boas Festas!


"Ajudar em foruns não trás dinheiro nem dá status.. Faça pela vontade de ajudar ao próximo.. Qualquer sentimento além disso não serve como motivação. Ajude, pois um dia você pode precisar de ajuda assim como eu já precisei.."

.'. Justo e Perfeito, como o PHP .'.



#2 filesgh

filesgh
  • Membros
  • 216 posts

Postado 26 December 2007 - 11:48 AM

Conteúdo de estudo:
http://en.wikipedia.org/wiki/Singleton_pattern



"Ajudar em foruns não trás dinheiro nem dá status.. Faça pela vontade de ajudar ao próximo.. Qualquer sentimento além disso não serve como motivação. Ajude, pois um dia você pode precisar de ajuda assim como eu já precisei.."

.'. Justo e Perfeito, como o PHP .'.

#3 Patrick xD

Patrick xD
  • Moderadores
  • 560 posts

Postado 31 October 2008 - 02:16 PM

CODE
public function __construct($caminho){
    if(isset($_SESSION['login'])){
        $this->login = $_SESSION['login'];
    }
    $this->db = Conexao::getConexao()->Conectar();
}


que falou que isto vai funcionar?
PISEPIAJSEIPAJSPEIJASPIE

eu sou o mais chato mesmo, mais isto ai vai dar pani no sistema " i'm so sorry".

isto que ele vai falar se voce rodar isto ai, ou fazer uma verificação desnecessario la na frente

eu acho qe deveria ter um else logo ali. biggrin.gif


ficando mais o menos assim:

CODE
public function __construct($caminho){
    if(isset($_SESSION['login'])){
        $this->login = $_SESSION['login'];
        $this->db = Conexao::getConexao()->Conectar();
    }else{
        header("location:{$this->urlSite}/login.php");
    }
}


sei la eu sou meio chato e so pra esclarecer o " $this->urlSite " recebe a variavel " $_SERVER['HTTP_HOST'] "
so pra ficar mais bunitinho. biggrin.gif
e ter o caminho certo. biggrin.gif
é sempre bom trabalhar com o caminho certo, pode crer? smile.gif

desculpas ai files.
mais como voce meesmo fala, "tem que ter um chato pra encher o saco."
SIEHAPSIEHASEHASPE




vaLew.


duvidas?
Poste a duvida...

Codigo pronto?
http://mepsistemas.piramidys.com.br/

Procurando programador profissional ?
http://mepsistemas.piramidys.com.br/

#4 kinzinho

kinzinho
  • Supervisores
  • 3929 posts

Postado 04 November 2008 - 08:04 AM

Não Patrick o que está em questão não é o tratamento e sim a Pattern Singleton, no caso ali dito por você, esse metodo em questão seria como se fosse um Setters sacou ?
Quer aprender PHP?
http://phparte.blogspot.com

Aguardando o FIM ou FILTRO do PHP...

Não confunda ajudar
com
Criar o script para você!

#5 katia Rosemberg

katia Rosemberg
  • Membros
  • 2 posts

Postado 19 April 2010 - 11:35 AM

Muito Bom, obrigada pela ajuda.




0 usuário(s) está(ão) lendo este tópico

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)