Buenas amigos, he leído en el foro que la conexion a la base de datos es mejor hacerla con el patron Registry que con Singleton.
Acabo de terminar una conexion que es con pdo y utiliza una clase que es un patron registro, que obviamente "registra" la conexion, para poder utilizarla posteriormente en cualquier otra clase, aqui les dejo las clases y me gustaría que me corrijieran a ver si está bien implementado el uso del patron, o está faltando algo (mas alla de que funcione lo que me interesa es el modelado en general y el uso del patron).
//clase que hace la conexion a pdo
Código PHP:
Ver originalclass conectarpdo{
private $base;
private $usuario;
private $pass;
function __construct(){
$this->base="mibase";
$this->usuario="miuser";
$this->pass="mipassword";
}
public function conectar(){
$conectar=new PDO('mysql:host=localhost;dbname='.$this->base,$this->usuario,$this->pass);
return $conectar;
}
}
// la interface del patron registry y su implementacion en la clase a utilizar
Código PHP:
Ver originalinterface patron_registro{
public function agregar();
public function remover();
public function obtener();
public function existe();
}
class registro_conexion implements patron_registro {
private $registro;
public function agregar() {
if(!isset($this->registro)) {
$conn = new conectarpdo();
$valor_conexion = $conn->conectar();
$this->registro = $valor_conexion;
}
}
public function remover() {
if(!empty($this->registro)) {
}
}
public function obtener() {
if(!empty($this->registro)) {
return $this->registro;
}
}
public function existe() {
if(!empty($this->registro)) {
return true;
}
else{
return false;
}
}
}
Su utilización:
Código PHP:
Ver original//dentro de un metodo de cualquier clase
$crearconn = new registro_conexion();
$existe = $crearconn->existe();
if(TRUE == $existe){
$conectar = $crearconn->obtener();
}
else{
$crearconn->agregar();
$conectar = $crearconn->obtener();
}
//en $conectar tengo una conexion PDO y puedo utilizarla por ej. para hacer un select.
$consulta=$conectar->prepare('select * from paraobj where id =:id');
$consulta->bindParam(':id',$this->dato);
$consulta->execute();
Bueno, el que pueda echar una miradita a ver si esta bien implementado esto le agradezco.