Created
July 20, 2012 15:03
-
-
Save tonysm/3151195 to your computer and use it in GitHub Desktop.
Singleton Example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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 <[email protected]> | |
* | |
*/ | |
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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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