Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/05/2012, 12:12
Avatar de McBlink
McBlink
 
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 17 años, 6 meses
Puntos: 23
Herencia de Clase Abstracta, duda

Buenas tardes,
Originalmente, diseñe esta clase para realizar consultas con MYSQL:
MySQL.php
Código PHP:
Ver original
  1. class MySQL
  2. {
  3.     private $_config = array();
  4.     private static $_instance = NULL;
  5.     private static $_connected = FALSE;
  6.     private $_link = NULL;
  7.     private $_result = NULL;
  8.    
  9.     // INSTANCIA SINGLETON DE LA CLASE
  10.     public static function getInstance($config = array())
  11.     {
  12.         if (self::$_instance === NULL)
  13.         {
  14.             self::$_instance = new self($config);
  15.         }
  16.         return self::$_instance;
  17.     }
  18.    
  19.     // Constructor privado
  20.     private function __construct(array $config)
  21.     {
  22.         if (count($config) < 4)
  23.         {
  24.             throw new MySQLAdapterException();  
  25.         }
  26.         $this->_config = $config;
  27.     }
  28.    
  29.     private function __clone(){}
  30.    
  31.     private function connect()
  32.     {
  33.         // conecto solo una vez
  34.         if (self::$_connected === FALSE)
  35.         {
  36.             list($host, $user, $password, $database) = $this->_config;
  37.             $this->_link = mysqli_connect($host, $user, $password, $database);
  38.             self::$_connected = TRUE;
  39.             unset($host, $user, $password, $database);      
  40.         }
  41.     }  
  42.    
  43.     public function query($query)
  44.     {
  45.         //realizo una consulta, la guardo en $_result
  46.     }
  47. }

En fin, creo una instancia singleton de la clase, pasando como parámetros los datos de conexión. Elimine metodos para hacer mas legible la clase.

Lo que estoy intando realizar ahora, es hacer una abstracción de la clase y setear los métodos abstractos que deberían implementar las clases que lo heredan.

DB_Adapter.php
Código PHP:
Ver original
  1. abstract class DB_Adapter
  2. {
  3. abstract function query(){}
  4. abstract function fetch(){}
  5. abstract function fetchAll(){}
  6. }

MySQL.php
Código PHP:
Ver original
  1. class MySQL extends DB_Adapter
  2. {
  3. //y acá???? :)
  4. }
Ahora bien, tengo dudas sobre como o donde poner los constructores singleton, y los métodos de conexión a la base de datos.

A la hora de instanciar una clase, por ejemplo el adaptar para MySQL o uno para PDO, como debería hacerlo?


Gracias!!