Cita:
Iniciado por GatorV Por si solas no se pueden duplicar, es imposible, más bien tu vía código tienes que controlar eso, ¿como? usando el registro siempre, esa es tu tarea de programador.
Ahora resumir todo eso en una sola línea? Pues puedes hacer otra clase que pasandole el parámetro del config cree el objeto y te regrese los datos, esa es precisamente la tarea del patrón Factory.
Será por patrones! madre mia! xDDDDDDDDDDDDDDDDD
Este es el código final del ejemplo. Funciona perfecto.
Código PHP:
Ver original<?php
require('config_reader.php');
require('MyPDO.class.php');
require('registry.php');
/************************************************************************/
class dbFactory
{
public static function create($sIniFile) {
if (Registry::exists($sIniFile)) {
return Registry::get($sIniFile);
}
$Config = new Config($sIniFile);
$db = new MyPDO($Config);
Registry::save($sIniFile, $db);
return $db;
}
}
/************************************************************************/
class Categoria{
private $_con;
public function __construct($DbConexion){
$this->_con=$DbConexion;
}
// Listar todas las categorias de la base de datos
public function listarCategorias(){
$query = "SELECT nombre FROM categorias";
$comando = $this->_con->prepare($query);
$comando->execute();
while( $datos = $comando->fetch() ) {
echo $datos[0].'<br />';
}
}
}
/************************************************************************/
class Partidos{
private $_con;
public function __construct($DbConexion){
$this->_con=$DbConexion;
}
// Listar todos las partidos de la base de datos
public function listarPartidos(){
$query = "SELECT home FROM partidos";
$comando = $this->_con->prepare($query);
$comando->execute();
while( $datos = $comando->fetch() ) {
echo $datos[0].'<br />';
}
}
}
/************************************************************************/
try {
$db_master = dbFactory::create('bd_master.ini');
$db_slave = dbFactory::create('bd_slave.ini');
$cat= new Categoria($db_slave);
$cat->listarCategorias(); // Leo de la BBDD slave
$cat->listarCategorias(); // Vuelvo a leer de la BBDD slave
// Creo el segundo objeto el cual hace una conexion con la BBDD master
$par= new Partidos($db_master);
$par->listarPartidos(); //Leo de la BBDD
// Cuenta el total de consultas que hubieron en cada BBDD
echo "Consultas realizadas en BD Slave: ".$db_slave->getQueryCount()."<br/>";
echo "Consultas realizadas en BD Master: ".$db_master->getQueryCount()."<br/>";
} catch (Exception $e) {
echo $e->getMessage();
echo "<br/>Ocurrio un error";
}
?>
Saludos y mil gracias por las lecciones del hilo