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

Clases dentro de clase

Estas en el tema de Clases dentro de clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Ando iniciandome en POO con PHP, y tengo una duda, tengo una clase que reliza la conexion a mysql para ejecutar consultas y demas, todo ...
  #1 (permalink)  
Antiguo 25/11/2005, 14:45
Avatar de tyo100  
Fecha de Ingreso: febrero-2005
Ubicación: Monterrey, NL
Mensajes: 475
Antigüedad: 19 años, 2 meses
Puntos: 1
Clases dentro de clase

Ando iniciandome en POO con PHP, y tengo una duda, tengo una clase que reliza la conexion a mysql para ejecutar consultas y demas, todo funciona vien, pero ahora tengo otra clase que estoy haciendo para gestionar usuarios

la clase de MySQL la inicio asi
$MySQL = new conexionMySQL("192.168.1.6","user","","basededatos ");
$MySQL->conectar();

las consultas asi

$MySQL->consulta("SELECT * FROM tabla");

y la de gestion de usuarios, la inicio asi:
$user = new gestionaUsuarios();

dentro de gestionaUsuarios tengo un metodo que es buscaUsuario($username) su funcion es buscar el usuario, mi duda es que si se podra usar dentro de este metodo el metodo
$MySQL->consulta("SELECT user_id,usuario FROM usuarios WHERE usuario='$username'");
sin tener que volverlo a crear

Espero haberme explicado bien
__________________
Desde la tierra de los nopales, las tortillas de maiz, y en cuya ciudad se encuenta el cerro de la silla.
NalgAss Web
SpiderMex - La Historia del Hombre Araña en MEXICO
  #2 (permalink)  
Antiguo 25/11/2005, 15:00
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Claro que se puede, pero para esto, tenés dos opciones:

1) en el constructor de tu clase gestionaUsuarios, creás una instancia de MySQL y se la asignás a un atributo. Luego, cada vez que quieras utilizar esta instancia dentro de esa clase, tenés que llamarla:
Código PHP:
$this->mysql->consulta("..."); 
Esto se conoce como Asociación en el mundo del diseño Orientado a Objetos.

2) Otro método más utilizado y quizás un poco más eficiente... es el de pasar por parámetro a las clases, una instancia única de MYSQL que puedan utilizar cmo servicio, esto trae varias ventajas, por ejemplo, menor utilización de recursos, ya que todos tus objetos que hacen consultas a la base de datos, están utilizando una misma instancia, y no una instancia nueva cada uno. Esto es conocido como Composición. En PHP4 hay que tener cuidado con las referencias, porque por defecto pasa los objetos como copia. Tendrías que hacer algo como
Código PHP:
<?php
$mysql 
=& new conexionMySQL("192.168.1.6","user","","basededatos ");
$userManager =& new gestionaUsuario();
$userManager->setDataProvider($mysql);
$usuario =& $userManager->buscaUsuario($username);

// luego, tu clase gestionaUsuario debería tener el método "setDataProvider"
// creado de esta manera:

class gestionaUsuario
{
function 
setDataProvider( &$provider )
{
$this->provider =& $provider;
}
}
?>
Saludos y espero que esto te sirva.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #3 (permalink)  
Antiguo 25/11/2005, 15:21
Avatar de tyo100  
Fecha de Ingreso: febrero-2005
Ubicación: Monterrey, NL
Mensajes: 475
Antigüedad: 19 años, 2 meses
Puntos: 1
Pregunta

Me gusta mas la segunda opcion por que exactamente es lo que queria hacer

Cita:
todos tus objetos que hacen consultas a la base de datos, están utilizando una misma instancia, y no una instancia nueva cada uno.
pero una vez hecho esto

Código PHP:
<?php
$mysql 
=& new conexionMySQL("192.168.1.6","user","","basededatos ");
$userManager =& new gestionaUsuario();
$userManager->setDataProvider($mysql);
$usuario =& $userManager->buscaUsuario($username);

// luego, tu clase gestionaUsuario debería tener el método "setDataProvider"
// creado de esta manera:

class gestionaUsuario
{
function 
setDataProvider( &$provider )
{
$this->provider =& $provider;
}
}
?>
Como haria las consultas

$this->provider->consultar();????
__________________
Desde la tierra de los nopales, las tortillas de maiz, y en cuya ciudad se encuenta el cerro de la silla.
NalgAss Web
SpiderMex - La Historia del Hombre Araña en MEXICO
  #4 (permalink)  
Antiguo 25/11/2005, 15:36
Avatar de tyo100  
Fecha de Ingreso: febrero-2005
Ubicación: Monterrey, NL
Mensajes: 475
Antigüedad: 19 años, 2 meses
Puntos: 1
Bueno me respondo solo, tenia algunos errores y no sabia como pero si es asi

$this->provider->consultar();
__________________
Desde la tierra de los nopales, las tortillas de maiz, y en cuya ciudad se encuenta el cerro de la silla.
NalgAss Web
SpiderMex - La Historia del Hombre Araña en MEXICO
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 16:13.