Ver Mensaje Individual
  #14 (permalink)  
Antiguo 05/08/2011, 15:07
Avatar de RIVERMILLOS
RIVERMILLOS
 
Fecha de Ingreso: marzo-2010
Mensajes: 1.336
Antigüedad: 14 años, 10 meses
Puntos: 15
Respuesta: Duda con clase para la DB(singleton).

Ok era una pregunta tonta.

Mira estos son una parte de los archivos que estoy usando en los ejemplos de registry.

Código PHP:
Ver original
  1. <?php
  2. error_reporting ( E_ALL );
  3. ini_set("display_errors" , 1 );
  4.  
  5. include("Factory.php");
  6. include("Registry.class.php");
  7. include("Reader.class.php");
  8. include("Db.class.php");
  9.  
  10. class DatabaseFactory implements Factory
  11. {
  12.     public static function create($sIniFile)
  13.     {
  14.         $config  = new Reader($sIniFile);        
  15.         $config_data = $config->getConfig();
  16.         $database_class = key($config_data);
  17.         include($database_class.'.class.php');
  18.         $db = new $database_class($config);
  19.         registry::add($sIniFile, $db);      
  20.         return $db;
  21.     }
  22. }
  23. ?>


Código PHP:
Ver original
  1. <?php
  2.  
  3. final class Mysql extends PDO
  4. {
  5.     private $_username;
  6.     private $_password;
  7.     private $_host;
  8.     private $_db;
  9.  
  10.     public function __construct(Reader $config)
  11.     {
  12.         $config_data = $config->getConfig();
  13.         $this->_username = $config_data['Mysql']['username'];
  14.         $this->_password = $config_data['Mysql']['password'];
  15.         $this->_host     = $config_data['Mysql']['host'];
  16.         $this->_db       = $config_data['Mysql']['dbname'];
  17.         $this->_dsn      = 'mysql:dbname='.$this->_db.';host='.$this->_host;
  18.         parent::__construct($this->_dsn, $this->_username, $this->_password);    
  19.     }
  20.    
  21. }
  22. ?>


Código PHP:
Ver original
  1. <?php
  2.  
  3. /*
  4.  * Clase encargada de gestionar las conexiones a la base de datos
  5.  * @author Esteban Quintero
  6.  */
  7. Class Db{
  8.  
  9.     /*establese la conexion*/
  10.     protected $_conect;
  11.     /*trabaja los query*/
  12.     protected $_query;
  13.     /*resultados de las consultas*/
  14.     protected $_row;
  15.     protected $_result;
  16.  
  17. /**
  18.  * La función construct es privada para evitar que el objeto pueda ser creado mediante new
  19.  **/
  20. function __construct(){
  21.    
  22.     try{
  23.    
  24.         $site_path = '../../includes/DB/config.ini';
  25.         $this->_conect=DatabaseFactory::create($site_path);  
  26.  
  27.     }  catch (Exception $e){
  28.        
  29.        
  30.        
  31.     }
  32. }
  33. /**
  34.  * Método para ejecutar una sentencia sql
  35.  * @param String $sql sentencia sql para ejecutar en la BD.
  36.  *
  37.  **/
  38. public function ejecutar($sql){
  39.    
  40.   try{
  41.        
  42.        $this->sql=$sql;
  43.        
  44.        $this->resulset = $this->_conect->query($sql);
  45.        
  46.        if(!$this->resulset){
  47.            
  48.            error_log("error al ejecutar la consulta ".$sql." funcion ejecutar ",3,"errorlog/Db_log.log");    
  49.        
  50.            
  51.        }
  52.        
  53.    }catch(Exception $e){
  54.         error_log("error al ejecutar la consulta ".$sql." funcion ejecutar ".$e->getMessage(),3,"errorlog/Db_log.log");
  55.    }
  56.    return $this->resulset;
  57. }
  58. /**
  59.  *Método para obtener una fila de resultados de la sentencia sql
  60.  *@param String $resulset resulset del resultado de la sentencia.
  61.  */
  62. public function obtener_fila($resulset){
  63. try{
  64.    if(!$resulset){
  65.      $this->array=array();
  66.    }else{
  67.      $this->array=$resulset->fetchObject();
  68.    }
  69. }catch(Exception $e){
  70.     error_log($e->getMessage()." Clase Db Funcion obtener_fila parametro".$resulset,3,"errorlog/user_log.log");
  71. }
  72. return $this->array;
  73. }
  74. /*
  75.  *Método para obtener las filas de resultados de la sentencia sql
  76.  *@param String $resulset resulset del resultado de la sentencia.
  77.  */
  78. public function obtener_filas($resulset){
  79.     if(!$resulset){
  80.         error_log("Error en la consulta sql :".$this->sql." funcion obtener_filas",3,"errorlog/Db_log.log");
  81.     }else{
  82.     $this->array=$resulset->fetchAll();
  83.     }
  84. return $this->array;
  85. }
  86. /**
  87.  *Método para obtener el numer de  filas del resultado de la sentencia sql
  88.  *@param String $resulset resulset del resultado de la sentencia.
  89.  */
  90. public function numero_filas($resulset){
  91.  try{
  92.      if($resulset){
  93.        
  94.          return $resulset->rowCount();
  95.      
  96.      }else{
  97.        
  98.          return false;
  99.      
  100.      }
  101.  }catch(Exception $e){
  102.    error_log($e->getMessage()." Error al contar los datos sql : ".$this->sql."funcion numero_filas -> @param ".$resulset,3,"errorlog/Db_log.log");
  103.  }
  104. }
  105. /**
  106.  *Inicia una trasaccion
  107.  **/
  108. public function startTransaction(){
  109.   $this->_conect->beginTransaction();
  110. }
  111. /**
  112.  * Confirma una trasaccion
  113.  **/
  114. public function commit(){
  115.    $this->_conect->commit();
  116. }
  117. /**
  118.  * Elimina una trasaccion
  119.  **/
  120. public function rollBack(){
  121.   $this->_conect->rollBack();
  122. }
  123. /**
  124.  *Ejecuta una trasaccion
  125.  *@param String $sql sentencia a ejecutar en le servidor.
  126.  */
  127. public function exec($sql){
  128.  try{
  129.   $this->_conect->exec($sql);
  130.  }catch (Exception $e){
  131.   error_log("Error al ejecutar sql :".$sql."funcion exec",3,"errorlog/Db_log.log");
  132.  }
  133. }
  134. /**
  135.  *retorna el ultimo id ingresado.
  136.  **/
  137. public function lastInsertId(){
  138. return $this->_conect->lastInsertId();
  139. }
  140. /**
  141.  * Prepara un a sentencia SQL
  142.  */
  143. public function prepare($sql){
  144.    
  145.  $stmt = $this->_conect->prepare($sql);
  146.  return $stmt;
  147. }
  148.  
  149. }
  150. ?>

todo es funcionado , bien lo unico es que no entiendo como recojo la instancia de la clase ya creada. es registry::get() , pero no comprendo el parametro que le deberia pasar.


porque lo coloco asi y me retorna la instancia de Mysql

$x = registry::get('../../includes/DB/config.ini');


saludos