Skip to content

Instantly share code, notes, and snippets.

@tonysm
Created July 20, 2012 15:03
Show Gist options
  • Save tonysm/3151195 to your computer and use it in GitHub Desktop.
Save tonysm/3151195 to your computer and use it in GitHub Desktop.
Singleton Example
<?php
/**
* BancoDeDados
*
* Essa classe estabelece uma conexão com o banco de dados e também
* é responsável por fechar essa conexão. Nessa classe também é possível forçar uma nova conexão.
*
* @author Luiz Messias <tonyzrp@gmail.com>
*
*/
class BancoDeDados {
/**
* @static
* @var BancoDeDados
*/
private static $instance;
/**
* @var PDO
*/
private $conn;
/**
* __construct
* o construtor será privado para evitar que essa classe seja instanciada
*
* @return void
*/
private function __construct(){
//qualquer implementação de construtor pode ser feita aqui
$this->conn = $this->PDOConnection();
}
/**
* PDOConnect
*
* @return PDO
*/
private function PDOConnection(){
return new PDO("mysql:host=localhost;dbname=singleton", "root", "");
}
/**
* getInstance
*
* @static
* @return BancoDeDados
*/
public static function getInstance(){
if(!isset(self::$instance))
self::$instance = new self();
return self::$instance;
}
/**
* connect
*
* @return PDO
*/
public function connect(){
return $this->conn;
}
/**
* forceReconnect
* esse método força um reconnect na conexão do singleton, caso seja necessário
*
* @return PDO
*/
public function forceReconnect(){
self::$instance->conn = $this->PDOConnection();
return self::$instance->conn;
}
}
<?php
require "BancoDeDados.php";
$Banco = BancoDeDados::getInstance();
$Banco2 = BancoDeDados::getInstance();
//var_dump($Banco === $Banco2); // output true
$conn = $Banco->connect();
$conn2 = $Banco2->connect();
//var_dump( $conn === $conn2 ); // output true
//forçando o reconnect
$conn2 = $Banco2->forceReconnect();
//var_dump( $conn === $conn2 ); // output false
$Banco3 = BancoDeDados::getInstance();
//var_dump(($Banco === $Banco3) && ($Banco2 === $Banco3)); //output true
$conn3 = $Banco3->connect();
//var_dump($conn === $conn2); // output false
//var_dump($conn2 === $conn3); // output true
$conn4 = $Banco->connect();
//$conn e $conn4 foram recuperadas pelo mesmo objeto ($Banco), mas eu forcei o reconnect no singleton
//var_dump($conn === $conn4); //output false
//var_dump($conn2 === $conn4); //output true
//var_dump($conn3 === $conn4); //output true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment