Foros del Web » Programando para Internet » PHP »

Usar clase DB dentro de otra clase

Estas en el tema de Usar clase DB dentro de otra clase en el foro de PHP en Foros del Web. Tengo una clase para realizar consultas a la base de datos. class_database.php Código PHP: class  database  {     public function  __construct () {          //Crea conexiones      }      ...
  #1 (permalink)  
Antiguo 18/07/2010, 17:45
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Usar clase DB dentro de otra clase

Tengo una clase para realizar consultas a la base de datos.

class_database.php
Código PHP:
class database {
    public function 
__construct() {
        
//Crea conexiones
    
}
    
    public function 
consulta($query) {
        
//Consulta
    
}

    public function 
getResult($result) {
        
//Obtiene resultados
    
}
?> 
Y ahora querría usar las funciones de esta clase en otra clase. Para ello he declarado una variable creando la clase:

class_users.php
Código PHP:
class users{
    var 
$db;
    public function 
__construct(){
        
$db = new database();
    }

    public function 
getAllUsers(){
        
$this->db->getResult(****);
    }    

Esto funciona. Sin embargo me da la sensación de que no es la mejor forma de hacerlo. ¿Hay una alternativa mejor, verdad?

Había pensado en algo así, pero no logro hacer algo que funcione:

index.php
Código PHP:
require_once(class_database.php);
$db = new database();
require_once(
class_users.php); 
Y también había pensado en usar herencia... ¿pero aquí no sería correcto, verdad?


Muchas gracias a todos por vuestra ayuda :)
  #2 (permalink)  
Antiguo 18/07/2010, 18:53
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Usar clase DB dentro de otra clase

Esta bien como lo tienes, solo un detalle, no uses var para definir atributos en cambio usa private, protected... etc (visibilidad).

El require_once(class_database.php) debe estar en tu clase users ya que class_users es dependiente de class_database.

Suerte =)
__________________
Ideorama. Su presencia en Internet
  #3 (permalink)  
Antiguo 18/07/2010, 19:54
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Usar clase DB dentro de otra clase

Cita:
Iniciado por dots3r Ver Mensaje
Esta bien como lo tienes, solo un detalle, no uses var para definir atributos en cambio usa private, protected... etc (visibilidad).

El require_once(class_database.php) debe estar en tu clase users ya que class_users es dependiente de class_database.

Suerte =)
Hola. Muchas gracias por contestar tan rápido.

¿Entonces no habría alguna forma de hacer que la variable $db siempre llamase a la clase database sin necesidad de tener que declarar la variable en todas las clases?

Sería interesante poder usar simplemente $db->consulta(); y no $this->dB->consulta();.

Además, por ejemplo, para cerrar la conexión habría que ir clase por clase cerrándolas:

$users->dB->close();
$posts->dB->close();

etc... Mientras que si se pudiese hacer lo que pregunto, bastaría con un unico $dB->close();

Tal vez me estoy complicando demasiado, no sé.... Alguna idea?


Gracias
  #4 (permalink)  
Antiguo 18/07/2010, 20:31
Avatar de dots3r  
Fecha de Ingreso: julio-2008
Mensajes: 106
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Usar clase DB dentro de otra clase

Cita:
Iniciado por Everu Ver Mensaje
Sería interesante poder usar simplemente $db->consulta(); y no $this->dB->consulta();
No te entendí muy bien esta parte, mas interesante? prácticamente es lo mismo.

Cita:
Iniciado por Everu Ver Mensaje
Además, por ejemplo, para cerrar la conexión habría que ir clase por clase cerrándolas:

$users->dB->close();
$posts->dB->close();

etc... Mientras que si se pudiese hacer lo que pregunto, bastaría con un unico $dB->close();
Puedes cerrar la conexión desde el destructor de tu clase database. (Tambien puedes investigar acerca del patrón singleton)

Suerte =)
__________________
Ideorama. Su presencia en Internet

Etiquetas: clase
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 18:15.