Foros del Web » Programando para Internet » PHP »

Sintetizar Clases PDO

Estas en el tema de Sintetizar Clases PDO en el foro de PHP en Foros del Web. Hola buena gente del Foro. Necesito preguntarles si se puede sintetizar estas 2 clases que lo único que lo diferencian son el nombre de la ...
  #1 (permalink)  
Antiguo 08/11/2014, 07:06
 
Fecha de Ingreso: abril-2012
Ubicación: Argentina
Mensajes: 215
Antigüedad: 12 años
Puntos: 2
Sintetizar Clases PDO

Hola buena gente del Foro. Necesito preguntarles si se puede sintetizar estas 2 clases que lo único que lo diferencian son el nombre de la clase y el nombre de la tabla.

¿Cuál es la mejor forma?

Clase 1:
Código PHP:
Ver original
  1. class Clase1 {
  2.        //Propiedades    
  3.         private static $host      = 'localhost';   
  4.     private static $user      = 'user';
  5.         private static $pass      = 'pass;
  6.     private static $dbname    = 'mi_base'; 
  7.     private static $dbh;
  8.         private static $error; 
  9.     private static $router;
  10.  
  11.    public static function construct(){
  12.        // Set DSN -- Donde se conecta
  13.         $dsn = 'mysql:host=' . self::$host . ';dbname=' . self::$dbname;       
  14.        // Set options
  15.        $options = array(
  16.            PDO::ATTR_PERSISTENT    => true,
  17.            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
  18.         );         
  19.        // Create a new PDO instanace, crear el objeto de acceso a base de datos
  20.        try{
  21.            self::$dbh = new PDO($dsn, self::$user, self::$pass, $options);
  22.             //funcion para crear el menu desde la base de datos
  23.             self::setRouter();     
  24.        }
  25.        // Catch any errors
  26.        catch(PDOException $e){
  27.            self::$error = $e->getMessage();
  28.        }
  29.    }
  30.    
  31.    public static function setRouter() {//Le cargo a 'router' los valores de inicialización
  32.      $array = array();
  33.      $stmt = self::$dbh->prepare('SELECT * FROM tabla_1');//stmt = statement = Sentencia, consulta
  34.      $stmt->execute();
  35.  
  36.      // Luego recorrer el juego de resultados:
  37.       while($row = $stmt->fetch(PDO::FETCH_ASSOC))
  38.       {
  39.           $array[$row['nombrePagina']] =
  40.           array(
  41.           'columna' => $row['columnaPagina'],
  42.           'contenido' => $row['contenidoPagina']         
  43.           );
  44.         // Asigno la columna sólo si es necesaria
  45.           if($row['columnaPagina'] != '')
  46.           {      
  47.             //$array[$row['arrayUrl_name']]['arrayUrl_column'] = $row['arrayUrl_column'];
  48.           }
  49.       }
  50.      
  51.      self::$router = $array;      
  52.    }
  53.      
  54. public static function getColumna($file = null ) {
  55.     self::construct();
  56.    if (array_key_exists($file, self::$router) && isset(self::$router[$file]['columna'])) {
  57.        ob_start();
  58.         if(is_file(self::$router[$file]['columna']))
  59.             require_once(self::$router[$file]['columna']);
  60.         return ob_get_clean();     
  61.    }
  62. }
  63.  
  64.  
  65. public static function getContenido($file = null) {
  66.     self::construct();
  67.    if (array_key_exists($file, self::$router) && is_file(self::$router[$file]['contenido'])) {
  68.        ob_start();
  69.         require_once(self::$router[$file]['contenido']);
  70.         return ob_get_clean();
  71.    }
  72. }

Clase 2:
Código PHP:
Ver original
  1. class Clase2 {
  2.        //Propiedades    
  3.         private static $host      = 'localhost';   
  4.     private static $user      = 'user';
  5.         private static $pass      = 'pass;
  6.     private static $dbname    = 'mi_base'; 
  7.     private static $dbh;
  8.         private static $error; 
  9.     private static $router;
  10.  
  11.    public static function construct(){
  12.        // Set DSN -- Donde se conecta
  13.         $dsn = 'mysql:host=' . self::$host . ';dbname=' . self::$dbname;       
  14.        // Set options
  15.        $options = array(
  16.            PDO::ATTR_PERSISTENT    => true,
  17.            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
  18.         );         
  19.        // Create a new PDO instanace, crear el objeto de acceso a base de datos
  20.        try{
  21.            self::$dbh = new PDO($dsn, self::$user, self::$pass, $options);
  22.             //funcion para crear el menu desde la base de datos
  23.             self::setRouter();     
  24.        }
  25.        // Catch any errors
  26.        catch(PDOException $e){
  27.            self::$error = $e->getMessage();
  28.        }
  29.    }
  30.    
  31.    public static function setRouter() {//Le cargo a 'router' los valores de inicialización
  32.      $array = array();
  33.      $stmt = self::$dbh->prepare('SELECT * FROM tabla_2');//stmt = statement = Sentencia, consulta
  34.      $stmt->execute();
  35.  
  36.      // Luego recorrer el juego de resultados:
  37.       while($row = $stmt->fetch(PDO::FETCH_ASSOC))
  38.       {
  39.           $array[$row['nombrePagina']] =
  40.           array(
  41.           'columna' => $row['columnaPagina'],
  42.           'contenido' => $row['contenidoPagina']         
  43.           );
  44.         // Asigno la columna sólo si es necesaria
  45.           if($row['columnaPagina'] != '')
  46.           {      
  47.             //$array[$row['arrayUrl_name']]['arrayUrl_column'] = $row['arrayUrl_column'];
  48.           }
  49.       }
  50.      
  51.      self::$router = $array;      
  52.    }
  53.      
  54. public static function getColumna($file = null ) {
  55.     self::construct();
  56.    if (array_key_exists($file, self::$router) && isset(self::$router[$file]['columna'])) {
  57.        ob_start();
  58.         if(is_file(self::$router[$file]['columna']))
  59.             require_once(self::$router[$file]['columna']);
  60.         return ob_get_clean();     
  61.    }
  62. }
  63.  
  64.  
  65. public static function getContenido($file = null) {
  66.     self::construct();
  67.    if (array_key_exists($file, self::$router) && is_file(self::$router[$file]['contenido'])) {
  68.        ob_start();
  69.         require_once(self::$router[$file]['contenido']);
  70.         return ob_get_clean();
  71.    }
  72. }

  #2 (permalink)  
Antiguo 08/11/2014, 07:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Sintetizar Clases PDO

Sólo necesitas una clase (FactoryPattern), y que el nombre de la tabla se reciba en el constructor para no repetir código.

Código PHP:
Ver original
  1. class Foo {
  2.   public static function factory($table) {
  3.     return new self($table);
  4.   }
  5. }
  6.  
  7. var_dump(Foo::factory('tabla_1'));
  8. var_dump(Foo::factory('tabla_2'));

Te sugiero investigar y leer más acerca de patrones de diseño, te hacen falta.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: php+base
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.