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

Persistir conexión a la BD dentro de clase

Estas en el tema de Persistir conexión a la BD dentro de clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola! Estoy aprendiendo a programar clases y a dividir en capas, y me ha surgido un problema que no sé solucionar. Tengo una clase que ...
  #1 (permalink)  
Antiguo 21/03/2007, 05:15
Avatar de El Menda  
Fecha de Ingreso: junio-2001
Ubicación: Jaén
Mensajes: 516
Antigüedad: 22 años, 10 meses
Puntos: 0
Persistir conexión a la BD dentro de clase

Hola! Estoy aprendiendo a programar clases y a dividir en capas, y me ha surgido un problema que no sé solucionar.
Tengo una clase que se llama noticias, y en su constructor reutilizo una clase para conectar con mysql. Hasta aquí todo correcto.
El problema que si llamo a la función que saca el titular ya no me sirve, porque al parecer toda la conexión que se hizo en el constructor con mysql se pierde. Entonces, ¿cómo puedo hacer que no se pierda la conexión al terminar el __construct?
Aquí dejo el ejemplo:
Código PHP:
<?
class noticias {
    function 
__construct () { //Esto va bien
        
require ('includes/class.mysql.php');
        
$mysql=new mysql;
        
$mysql->connect ();
        
$mysql->select ();
    }

    public function 
sacaTitular () {
        
$query="SELECT blablablabla";
        
$row=$mysql->f_uno_array($query); //Aquí es donde no funciona porque dice que $mysql no existe
        
echo $row['titular'];
    }
}
?>
__________________
"No hay mujer fea sino copa de menos"

Última edición por El Menda; 21/03/2007 a las 05:21
  #2 (permalink)  
Antiguo 21/03/2007, 08:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Persistir conexión a la BD dentro de clase

Necesitas guardar tu conexion en un miembro de la clase:
Código PHP:
<?
class noticias {
    var 
$mysql;
    function 
__construct () { //Esto va bien
        
require ('includes/class.mysql.php');
        
$this->mysql=new mysql;
        
$this->mysql->connect ();
        
$this->mysql->select ();
    }

    public function 
sacaTitular () {
        
$query="SELECT blablablabla";
        
$row=$this->mysql->f_uno_array($query); //Aquí es donde no funciona porque dice que $mysql no existe
        
echo $row['titular'];
    }
}
?>
  #3 (permalink)  
Antiguo 21/03/2007, 16:01
Avatar de El Menda  
Fecha de Ingreso: junio-2001
Ubicación: Jaén
Mensajes: 516
Antigüedad: 22 años, 10 meses
Puntos: 0
Re: Persistir conexión a la BD dentro de clase

Muchas gracias GatorV. Gracias a personas como tú los aprendices de la programación avanzada en PHP vamos dando pequeños pasitos en experiencia.

Si no fuera por tu solución me hubiera visto atascado en el proyecto sin saber cómo seguir.

¡Saludos!
__________________
"No hay mujer fea sino copa de menos"
  #4 (permalink)  
Antiguo 22/03/2007, 05:04
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 20 años, 7 meses
Puntos: 3
Re: Persistir conexión a la BD dentro de clase

De todos modos El Menda, por qué no haces una relación de uso?

Es decir, tienes el objeto base de datos por un lado, de manera que es "utilizable por todas las clases".

Es tan fácil como hacer:

Código PHP:
<?
class noticias {
    var 
$items;

    function 
__construct () {
        
// lo que sea
    
}

    public function 
sacaTitular ($objetoBaseDeDatos) {
        
$query="SELECT blablablabla";
        
$objetoBaseDeDatos->query($query);
        
$row $objetoBaseDeDatos->nextItem();
        echo 
$row['titular'];
    }
}
?>
  #5 (permalink)  
Antiguo 22/03/2007, 08:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Persistir conexión a la BD dentro de clase

A veces es mejor tener tu instancia de tu objeto a la base de datos en tu script en lugar de estarlo pasando entre todas las funciones, mantiene el codigo mas limpio, y para evitar multiples instancias y conexiones lo mas recomendable es usar el patron singleton en tu objeto de base de datos.
  #6 (permalink)  
Antiguo 22/03/2007, 11:46
Avatar de El Menda  
Fecha de Ingreso: junio-2001
Ubicación: Jaén
Mensajes: 516
Antigüedad: 22 años, 10 meses
Puntos: 0
Re: Persistir conexión a la BD dentro de clase

Gracias kaS_aPPeaL por tu aportación, pero me quedo con lo que dice GatorV. Y no es por llevarte la contraria :P
__________________
"No hay mujer fea sino copa de menos"
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 02:07.