Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/01/2013, 13:54
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Duda singlenton

Cita:
Iniciado por sagitariosTheBest Ver Mensaje
Lo que sigo sin entender es si esta clase de ejemplo que me muestras usa instancia unica de conexion entonces como puedo "reciclar este codigo" en otra clase que tambien ocupe de una conexion a la base de datos?
No entiendo a qué te refieres con que "ocupen" una conexión de base de datos...
Si "ocupen" es "usan", ambos objetos "usan" el singleton para obtener la instancia.

Si "ocupen" es "gestionen", porque quieres tener varias conexiones a base de datos (porque estás conectando a dos servidores distintos, o con dos usuarios distintos), y lo que quieres hacer es que cada conexión sea un singleton (asegurarte de que hay sólo una instancia de cada conexión), y a eso es a lo que llamas "reciclar", entonces es diferente.
Lo que llamas "reciclar", en OOP, siempre es herencia.Por lo tanto, necesitarás una clase base, y clases derivadas por cada conexion.
Digamos que la clase base se llama "ConexionGenerica", y las clases derivadas son "ConexionServerA' y 'ConexionServerB'.
La clase ConexionGenerica tendrá toda la funcionalidad de conectar a una base de datos, hacer queries, etc.
ConexionServerA y ConexionServerB, deben configurar ConexionGenerica con los parámetros que requieran.
Lo importante aqui es tener en cuenta que, de ConexionGenerica NO se pueden crear, ni obtener instancias.Y que ConexionServerA y ConexionServerB deben poder llamar al constructor de ConexionGenerica.
Para ello, ConexionGenerica tiene que tener su constructor definido como "protected", al igual que sus clases derivadas (en vez de "private").
La implementación sería así:

Código PHP:
Ver original
  1. class ConexionGenerica
  2. {
  3.    protected $host;
  4.    protected $user;
  5.    protected $password;
  6.    protected $db;
  7.    protected function __construct($host,$user,$password,$db)
  8.    {
  9.       /* Se realiza la conexion */
  10.    }
  11.    function query($q)
  12.    {
  13.      /* Realiza una query */
  14.    }
  15. }
  16. class ConexionServerA extends ConexionGenerica
  17. {
  18.    static $instance;
  19.    protected function __construct()
  20.    {
  21.      // Los parametros se obtienen de configuracion.Aqui supongo que son defines.
  22.      parent::__construct(HOST1,USER1,PASSWORD1,DB1);
  23.    }
  24.    static function getInstance()
  25.    {
  26.        if(!ConexionServerA::$instance)
  27.            ConexionServerA::$instance=new b();
  28.         return ConexionServerA::$instance;
  29.    }
  30. }
  31.  
  32. $h=ConexionServerA::getInstance();
  33. $h->query("Select ...");

La implementación de ConexionServerB es idéntica a ConexionServerA.Sólo cambian los parámetros pasados al constructor de ConexionGenerica.