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

Llamar a metodo de una clase desde el metodo de otra clase

Estas en el tema de Llamar a metodo de una clase desde el metodo de otra clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Foro: Tengo un problema aqui, tengo un metodo en una clase, en ese metodo quiero llamar a un metodo de otra clase, pero no ...
  #1 (permalink)  
Antiguo 18/06/2005, 09:34
Avatar de lorecasas  
Fecha de Ingreso: noviembre-2003
Mensajes: 126
Antigüedad: 20 años, 5 meses
Puntos: 0
Llamar a metodo de una clase desde el metodo de otra clase

Hola Foro:

Tengo un problema aqui, tengo un metodo en una clase, en ese metodo quiero llamar a un metodo de otra clase, pero no se como hacer si no lo hago desde un objeto. Algo asi:


class Articulo{
var $Id;
var $Nombre;
var $IdMenu;
function MuestraArticulo($IdArticulo){
$this -> Id = $IdArticulo;
$SQL = "SELECT ID, Nombre, IdMenu FROM ARTICULOS WHERE ID = ".$this -> Id";
$resul = mysql_query($SQL, $_SESSION['cnx']);
while( $fila = mysql_fetch_array( $resul ) ) {
echo $fila['ID'];
echo $fila['Nombre'];
echo MuestraNombre($fila['IdMenu']);
}

}

//Clase de donde saco el nombre del menu
class Menu{
var $Id;
var $Nombre;
function MuestraNombre($IdMenu){
$this -> Id = $IdMenu;
$SQL = "SELECT Nombre FROM MENUS WHERE ID = ".$this -> Id";
$resul = mysql_query($SQL, $_SESSION['cnx']);
while( $fila = mysql_fetch_array( $resul ) ) {
return $fila['Nombre'];
}

}

Lo que quiero es poder obtener el nombre del menu desde otra clase, llamando al metodo correspondiente de la clase Menu desde la clase donde lo necesito.

Gracias, ojala alguien me pueda dar una idea de como hacer esto, podria hacer una funcion aparte, solo asi se me ocurre pero ya no usaria el metodo que existe para esto en la clase Menu, que es lo que quiero hacer,


Gracias!!

Atte. Lore
__________________
Lorena ;-)
  #2 (permalink)  
Antiguo 18/06/2005, 10:21
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
Hola Lore,

Lo que vos querés es, de alguna manera, utilizar información de una clase, para el funcionamiento de otra clase. Eso no es muy complicado, si utilizamos bien las ventajas que nos ofrecen los objetos.
Por lo que pude entender de tu clase, vos querés que un Artículo, muestre un Menu determinado? :S Bueno, te comento que lo mejor, es que los Objetos no tengan "lógica de presentación", o sea, que mantengas tus objetos libres de "echos", y asi poder mantener todo separado y limpio. Yo haría lo siguiente (errores de sintaxis más o menos):

Código PHP:
<?
class Articulo
{
    var 
$Id;
    var 
$Nombre;
    var 
$IdMenu;

    function 
Articulo$id )
    {
        
$this->Id $id;
        if(empty(
$this->Nombre) || empty($this->IdMenu))
        {
            
$this->cargar();
        }
    }
    
    function 
cargar()
    {
        
$SQL "SELECT ID, Nombre, IdMenu FROM ARTICULOS WHERE ID = ".$this->Id;
        
$resul mysql_query($SQL$_SESSION['cnx']);
        
$fila mysql_fetch_array$resul );
        
$this->Nombre $fila['Nombre'];
        
$this->IdMenu $fila['IdMenu'];
    }
    
    function 
mostrar()
    {
        echo 
$this->Id;
        echo 
$this->Nombre;
    }
}

//Clase de donde saco el nombre del menu
class Menu
{
    var 
$Id;
    var 
$Nombre;

    function 
Menu$id )
    {
        
$this->Id $id;
        if(empty(
$this->Nombre))
        {
            
$this->cargar();
        }
    }
    
    function 
cargar()
    {
        
$SQL "SELECT Nombre FROM MENUS WHERE ID = ".$this->Id;
        
$resul mysql_query($SQL$_SESSION['cnx']);
        
$fila mysql_fetch_array$resul );
        
$this->Nombre $fila['Nombre'];
    }

    function 
mostrar()
    {
        echo 
$this->Nombre;
    }
}

// Y asi es como se utilizaría
$art    = new Articulo(1);
$menu = new Menu($art->IdMenu);
$art->mostrar();
$menu->mostrar();
?>
Saludos y espero que te sirva.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #3 (permalink)  
Antiguo 18/06/2005, 10:32
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola Lorena:

Si fuera el caso de que un artículo tiene un menú (¿?), entonces debe tener como atributo un objeto de la clase Menu. En el constructor instancias un Menu y lo guardas en $this->menu.
Luego puedes acceder a los métodos de Menu a través de ese objeto.
Pero la verdad es que la relación natural entre Artículo y Menú no la veo del todo clara.
Tal vez sea mejor trabajar los objetos por separado.

Saludos
PD: Trata de quitar todos los "echo". Puedes utilizar un sólo método que imprima en pantalla.
  #4 (permalink)  
Antiguo 18/06/2005, 12:00
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
si no mal tengo entendido para llamar una funcion de otra clase bastas con hacer asi...
Código PHP:
class saludo
{
 function 
nombre($nombre)
{
echo 
"Hola ".$nombre."<br>";
}
//end funcion
}//end class

class yo
{
function 
yo ($nombre)
{
saludo::nombre($nombre);   //---- Esta es la forma de llamar una funcion de otro class
echo "Te saluda DarioDario.<br>";
}
//end funcion
}//end class

$unavariable = new yo("Gabriel"); 
obviamente este no es un ejemplo muy practico pero la idea creo que esta bien clara... para llamar la funcion de otro class basta con poner el nombre_class::function();... espero q les sirva de algo... saludos, ahhh esto es bajo PHP 4, nose si sera igual para PHP 5, la aclaracion queda echa ...

Última edición por DarioDario; 18/06/2005 a las 12:01 Razón: .
  #5 (permalink)  
Antiguo 18/06/2005, 13:26
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
DarioDario, tu solución es para llamar a un método "DE CLASE" de un objeto. Si tu método, por ejemplo, tuviera un $this, ya no funcionaría y daría error. Vale la aclaración para no generar confusiones.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 18/06/2005, 17:46
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
perdonenme, no hace mucho empiezo con esto de los objetos, gracias por la aclaracion Webstudio, y perdonen la confucion que pude haber generado...
  #7 (permalink)  
Antiguo 20/06/2005, 09:31
Avatar de lorecasas  
Fecha de Ingreso: noviembre-2003
Mensajes: 126
Antigüedad: 20 años, 5 meses
Puntos: 0
Foro:


No estoy muy segura, pero creo que de todo lo que me comentaron, JPinedo se acerca mas a lo que quiero hacer. Jpinedo dice que:

Cita:
Pero la verdad es que la relación natural entre Artículo y Menú no la veo del todo clara.
De hecho, serian 2 objetos separados, solo que menu tiene un id y un nombre, y metodos para pasando por parametro un ID de menu, obtener el nombre de este.

Articulo es otra clase, que tiene un ID, un nombre de articulo y un id de menu, que representa el menu donde el articulo se encuentra, quiero en mi clase Articulo, por medio de un metodo, pasarle por parametro el ID del articulo que quiero, y me muestre el nombre del articulo, y, en lugar de mostrarme el id del menu donde esta, me muestre el nombre de este menu, es decir, acceder al metodo de menu, desde la clase articulo, Jpinedo comenta que:

Cita:
debe tener como atributo un objeto de la clase Menu. En el constructor instancias un Menu y lo guardas en $this->menu.
Podrias darme un ejemplo de esto en codigo JPinedo? muchas gracias...



Atte. Lore
__________________
Lorena ;-)
  #8 (permalink)  
Antiguo 20/06/2005, 10:19
Avatar de lorecasas  
Fecha de Ingreso: noviembre-2003
Mensajes: 126
Antigüedad: 20 años, 5 meses
Puntos: 0
las ultimas dudas

Ya quedo como tu decias JPinedo, es exacto lo que necesitaba, solo me queda la duda de dos comentarios que me hiciste:

Cita:
Pero la verdad es que la relación natural entre Artículo y Menú no la veo del todo clara. Pero la verdad es que la relación natural entre Artículo y Menú no la veo del todo clara.
Tal vez sea mejor trabajar los objetos por separado.
la explique en el Post anterior, espero haberme explicado.

y el otro comentario:

Cita:
Trata de quitar todos los "echo". Puedes utilizar un sólo método que imprima en pantalla.
mmm, aqui utilizaria un metodo como el que usa WebStudio en el script que el mandó no?


Gracias JPinedo! Atte Lorena
__________________
Lorena ;-)
  #9 (permalink)  
Antiguo 20/06/2005, 16:47
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola Lore:

Sobre la relación entre ambos objetos... si tú ves claro que un menú es un atributo de un artículo... entonces todo está bien.
Lo que pasa es que yo no termino de entender qué es un menú (disculpa la brutalidad).

Tal como lo explicas parece que sí puede haber una relación natural de pertenencia entre ambos... pero sería al revés. O sea, un menú que contiene artículos y no un artículo que contiene menúes.

Como te digo, es una decisión tuya. Tú sabes cómo funciona tu aplicación. Lo que debes tratar es de reflejar la realidad lo mejor posible. No está mal que lo hagas com lo has hecho.

-------------

Sobre lo de suprimir los "echo's", sí... hay que hacer algún método de salida como lo que planteó Webstudio.

Saludos
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:39.