Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clases de clases

Estas en el tema de Clases de clases en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola gente. Les cuento lo que quiero hacer. No se si es correcto llamarlo clases de clases u objeto de objetos. Quisiera hacer un objeto ...
  #1 (permalink)  
Antiguo 09/07/2006, 11:01
Avatar de nicojaure  
Fecha de Ingreso: mayo-2004
Ubicación: Buenos Aires
Mensajes: 49
Antigüedad: 20 años
Puntos: 0
Clases de clases

Hola gente.

Les cuento lo que quiero hacer. No se si es correcto llamarlo clases de clases u objeto de objetos.
Quisiera hacer un objeto que contenga todas las bases de datos que utilizo en un sitio. A si vez, cada base sería un objeto con propiedades y atributos. Esto me serviría para tener todo consentrado y desde los modulos podrías llamar así

bases_de_datos->usuarios->conectar(); o bases_de_datos->inventario->conectar();

No se si explico o me hice lio en el camino. Cual sería la forma correcta de declarar esto?

Yo creo que la forma sería declarar una clase con constantes pero eso es un poco contrario al concepto de poo o no?

ah, y disculpen mi ignorancia!!

Saludos
__________________
www.nicojaure.com.ar
  #2 (permalink)  
Antiguo 10/07/2006, 08:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Pues, puedes hacer una clase, con un storage, luego usar el metodo magico de __get para devolver uno de los items del storage y poder darle los eventos, por decir:
Código PHP:
class Bases_de_datos {
      private 
$_storage = array();
      
      public function 
__construct() {}

      public function 
__get$bd ) {
            if( isset( 
$this->_storage[$bd] ) ) {
                  return 
$this->_storage[$bd];
            } else {
                  throw new 
Exception$bd " no se encontró" );
            }
      }

      public function 
__set$bd_name$bd ) {
              if( !isset( 
$this->_storage[$bd_name] ) && is_object$bd ) ) {
                     
$this->_storage[$bd_name] = $bd;
              } else {
                     throw new 
Exception$bd_name " ya existente o no es un objeto";
              }
      }

y lo puedes usar asi:
Código PHP:
$bdds = new Bases_de_datos();
$users = new UsersDB();
$bdds->usuarios $users;
$inventario = new InventarioDB();
$bdds->inventario $inventario
y ya luego los puedes rescatar asi:
Código PHP:
$conn $bdds->usuarios->conectar(); 
Espero te sirva :)
  #3 (permalink)  
Antiguo 10/07/2006, 19:12
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
El problema con ese diseño es que no estás "encapsulando" el uso de bases de datos.

¿Por qué no el modelo "clásico" (y suficientemente probado como para no tener que reinventarlo ) de una "clase de abstracción genérica" y luego le pasas por parámetros o por métodos cual es la base que quieres usar?

Una instancia del objeto = una base de datos.

Dependerá también de qué es lo que quieres hacer con las bases, si vas a interactuar entre ellas, etc.

Mi sugerencia sería que crees una clase "BaseDeDatos" que te abstraiga de las clases "concretas" de abstracción (AdoDB, Pear, etc) e implementes tú los métodos que vas a necesitar, pero que la implementación contenga dentro las llamadas a los métodos de las clases concretas.

Por ejemplo, si usas en todo tu sistema la clase AdoBD, y mañana decides cambiar a Pear, tu código está tan acoplado que tendrás que modificar todo el sistema donde use las bases de datos.

De lo contrario, solo modificas la implementación de la clase "BaseDeDatos" y todo tu sistema no se entera, y el costo de los cambios será mucho menor.

Tu sistema pasará a depender de "implementaciones abstractas" y no de "implementaciones concretas", desacoplando mejor el código.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #4 (permalink)  
Antiguo 14/07/2006, 07:15
Avatar de Hereje  
Fecha de Ingreso: junio-2002
Ubicación: Córdoba, Argentina
Mensajes: 439
Antigüedad: 21 años, 10 meses
Puntos: 2
enriqueplace, cada día se te vé más sólido en tus conocimientos, didáctica y predisposición. Nos es de gran ayuda para los que nos estamos iniciando en este confuso mundo OO. Felicitaciones y muchas gracias.
Hasta luego!
__________________
Sergio
  #5 (permalink)  
Antiguo 14/07/2006, 12:39
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Ay! que susto... leí tu comentario y pensé (antes de terminar) que estabas hablando en "Modo Irónico On" y que iba a terminar con un insulto!

Bueno, trato de contenerme, pero soy muy temperamental y tengo facilidad para calentarme (como con algunas preguntas que se nota a la distancia que no hay el menor esfuerzo por aprender).

Pero bueno, gracias por opinar y comentarme "que se me ve más sólido" etcétera, etcétera
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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 00:32.