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

Llamada a metodo de una clase desde un parametro.

Estas en el tema de Llamada a metodo de una clase desde un parametro. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Pues, les explico bien lo que quiero hacer, creo que si lo he visto en algùn libro pero no recuerdo cual xD. Lo que quiero ...
  #1 (permalink)  
Antiguo 14/08/2008, 09:00
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Llamada a metodo de una clase desde un parametro.

Pues, les explico bien lo que quiero hacer, creo que si lo he visto en algùn libro pero no recuerdo cual xD.

Lo que quiero hacer es llamar a un metodo mediante un parametro o atributo cuando instancie la clase. Ya lo tengo funcional pero no se si haya una mejor manera o una manera de hacer propiamente con objeto. Les dejo el codigo

Código PHP:
class Pruebas
    
{
        function 
__construct($metodo)
        {
            
call_user_func(array($this,$metodo));
        }
        
        function 
despliega()
        {
            echo 
"Metodo despliega";
        }

                function 
cierra()
                {
            echo 
"Metodo cierra";
        }
        
        function 
__destruct()
        {
         
        }
    }
    
    
$objeto = new Pruebas("despliega"); 
Asi con esta instancia, me despliega en pantalla "Metodo despliega" y si le paso como argumento "cierra" me buscaria el metodo cierra.

Hay alguna otra manera de hacer esto??? Como les comentè, asi me funciona bien pero creo haber visto que se hacia de otra manera con alguna propiedad de los objetos.

Gracias de antemano, saludos!!!
  #2 (permalink)  
Antiguo 14/08/2008, 09:05
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
Respuesta: Llamada a metodo de una clase desde un parametro.

Hola Angel_Cruijff,

Puedes usar el método magico __call, o directamente desde una variable:
Código PHP:
$metodo "despliega";
$objeto->$metodo(); 
Saludos.
  #3 (permalink)  
Antiguo 14/08/2008, 09:22
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Llamada a metodo de una clase desde un parametro.

Hola que tal GatorV, muchas gracias!!! Ya lo he implementado de esa manera , si recordaba haberlo visto pero tengo varios libros de php y me iba a tardar mas en buscarlo.

Una vez mas, gracias

Saludos!!!
  #4 (permalink)  
Antiguo 14/08/2008, 09:30
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
Respuesta: Llamada a metodo de una clase desde un parametro.

De todos modos recuerda que puedes usar call_user_func desde fuera de la clase.

Saludos.
  #5 (permalink)  
Antiguo 14/08/2008, 09:59
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Llamada a metodo de una clase desde un parametro.

Cita:
Iniciado por Angel_Cruijff Ver Mensaje
Hola que tal GatorV, muchas gracias!!! Ya lo he implementado de esa manera , si recordaba haberlo visto pero tengo varios libros de php y me iba a tardar mas en buscarlo.

Una vez mas, gracias

Saludos!!!
Pregunta, ya que veo siempre nos quedamos en las construcciones/sintaxis del lenguaje y muy poco nos detenemos en los conceptos y diseños de OO...

... para que demonios quieres hacer eso?

Puedes explicarme conceptualmente hablando qué quieres que hagan tus objetos en qué contexto determinado? (ya que si no hablamos de contextos no podermos entender los objetos).

eh? eh?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #6 (permalink)  
Antiguo 14/08/2008, 10:36
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Llamada a metodo de una clase desde un parametro.

Cita:
Iniciado por enriqueplace Ver Mensaje
Pregunta, ya que veo siempre nos quedamos en las construcciones/sintaxis del lenguaje y muy poco nos detenemos en los conceptos y diseños de OO...

... para que demonios quieres hacer eso?

Puedes explicarme conceptualmente hablando qué quieres que hagan tus objetos en qué contexto determinado? (ya que si no hablamos de contextos no podermos entender los objetos).

eh? eh?

haha, si, te entiendo. Dejame te explico.
Tenia un sistema de captura en Ruby on rails pero se va a migrar a PHP, pero le quiero aplicar un poco la metodologia del rails (el menos el que manejabamos aqui).

Tengo un archivo de php que es el que van a estar posteando las diferentes paginas en donde se capturen los datos. El procesado principal de los datos lo voy a hacer en un objeto, para eso necesitaba saber mi pregunta inicial. Te pongo algo del codigo para que me entiendas mejor.

Código PHP:

else if($_POST)
{
        
//Instancio el controlador, aqui tomo los datos que se vayan capturando
    
$controlador = new controladorCampaña(); 

        
//En base a que archivo php me encuentre, es el metodo que voy a usar
        //Ejemplo. Si el post viene de  "screen1.php", declaro un objeto hidden con valor de  "screen1". Por lo que el metodo a usar del objeto seria el  screen1
        //Le paso com argumento el $_POST
    
$metodo $_POST['screen'];
    
$controlador->$metodo($_POST);

        
//Finalmente cuando haya procesado la info capturada, redirecciono a la pagina correspondiente. Aqui el atributo "redirigir" lo asigno en el metodo correspondiente (creo que no es bien visto acceder a los atributos del objeto fuera del mismo, no?)
    
$utilidades->redirigir($controlador->redirigir);


Asi es que por eso es que necesitaba lo que cuestiono en el post.
Como ves? Hay algun planteamiento mal? Alguna mejor solucion?

Gracias de todas maneras por tu apunte.
Saludos!!!
  #7 (permalink)  
Antiguo 14/08/2008, 11:39
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
Respuesta: Llamada a metodo de una clase desde un parametro.

Hola Angel_Cruijff,

Básicamente lo que quieres hacer es un Ruteador / FrontController, te recomiendo busques en el web hay varios ya hechos y puedes ver el código, en lo particular te puedo mostrar el mio para que lo veas: http://code.google.com/p/geckotoolbo...cko/Router.php

Saludos.
  #8 (permalink)  
Antiguo 14/08/2008, 11:57
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Llamada a metodo de una clase desde un parametro.

Hola que tal GatorV!!!

Muchas gracias por el link a tu ruteador, lo voy a checar y sacarle provecho
Ya tengo algo de experiencia en php, pero en objetos todavia me falta aunque ya estoy puesto en el tema (he hecho algunas cosas interesantes con objetos y AJAX).

De igual manera, para sacarle el maximo provecho posible trataè de aplicar lo que vea en tu ruteador en uno propio o al menos uno funcional para las necesidades de esta aplicacion.

Gracias una vez mas!!!
  #9 (permalink)  
Antiguo 14/08/2008, 12:06
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
Respuesta: Llamada a metodo de una clase desde un parametro.

De nada, te recomiendo también le des una vuelta al Zend Framework, es de los mejores Frameworks y mas estandares para PHP5, para desarrollo web.

Saludos.
  #10 (permalink)  
Antiguo 14/08/2008, 20:21
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Llamada a metodo de una clase desde un parametro.

Cita:
Iniciado por Angel_Cruijff Ver Mensaje
Código PHP:
        //Finalmente cuando haya procesado la info capturada, redirecciono 
a la pagina correspondienteAqui el atributo "redirigir" lo asigno en el metodo 
correspondiente 
(creo que no es bien visto acceder a los atributos del objeto 
fuera del mismo
no?)
    
$utilidades->redirigir($controlador->redirigir);

Si, el resto lo entendí, es entendible lo que quieres hacer y cómo, pero hay que tener en claro que solo es para casos muy especiales, como lo que estás intentando hacer (¿escucharon niños? ¡no intenten hacer esto en su casa sin supervisión de un adulto!).

Pero cuando dices "no es bien visto" tengo que tirarte de las orejas... los atributos públicos están prohibidos (desde la base de la POO), y en caso de necesitar su acceso podrás usar métodos get/set lo más restringido posible (o lograrás el mismo efecto de atributos públicos).

Lo que no entiendo es qué retornaría el controlador, intento asumir que sería el destino, pero no sé bien cómo lo quieres definir.

Veo más algo del tipo:

Código PHP:
  $utilidades->redirigir$controlador->getPagina() ); 
O usar algo más de polimorfismo (dentro le pide "el destino" al controlador):

Código PHP:
    $utilidades->redirigir$controlador); 
Y tal vez reforzando el diseño con una interfaz para que todo controlador tenga siempre un método getPagina().

Código PHP:
interface Controlador
{
   public function 
getPagina();

y en "redirigir" de "utilidades":

Código PHP:
public function redirigir(Controlador $controlador)
{
   
$controlador->goPagina();

No sé, estoy tirando ideas, tal vez no necesites pasar por algo "utilidades", el controlador debería internamente saber qué hacer (o pedirle internamente a quién sabe hacerlo).

Pero como bien dice mi colega, prueba Zend Framework
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #11 (permalink)  
Antiguo 15/08/2008, 12:10
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Llamada a metodo de una clase desde un parametro.

Gracias por los consejor Enriqueplace
Y si, ya sabia lo de los accesos a los atributos desde fuera del Objeto, no lo vuelvo a hacer, hahaha.

Me tengo que meter mas con los objetos en PHP, para saber como trabajar correctamente con la metodologia. ya tengo un muy buen libro
De igual manera me voy a pasar tambien por tu blog para sacar provecho.

Gracias!!!
  #12 (permalink)  
Antiguo 15/08/2008, 12:49
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Llamada a metodo de una clase desde un parametro.

¿Cual es el libro? Espero que no sea de PHP.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #13 (permalink)  
Antiguo 15/08/2008, 12:54
 
Fecha de Ingreso: octubre-2007
Mensajes: 36
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Llamada a metodo de una clase desde un parametro.

Cita:
Iniciado por enriqueplace Ver Mensaje
¿Cual es el libro? Espero que no sea de PHP.
haha, el libro es "Object-Oriented Programming with PHP5". La verdad es que esta muy bueno, pero obvio, tambien necesito extenderme con otro que sea Orientado a Objetos pero no especifico para un solo lenguaje.

  #14 (permalink)  
Antiguo 15/08/2008, 13:35
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Llamada a metodo de una clase desde un parametro.

Mmm... estuve viendo el contenido del mismo y parace bastante bueno (habría que leerlo entero).

La mayoría de los libros de PHP son insuficientes con la POO.

Como criterio de evaluación, si el tema "interfaces" solo ocupa una hoja, ya te puedo decir que el libro no es del todo bueno (aunque luego hagan relleno con patrones de diseño )

Luego comenta como te fue.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #15 (permalink)  
Antiguo 15/08/2008, 14:01
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Llamada a metodo de una clase desde un parametro.

Mmmm... estuve viendo algunos capítulos y no me convence... para hablar de interfaces o de herencia solo se toman una hoja y no hay diseños explicados con UML.

Puedes explicar en una hoja cómo es la sintaxis de la herencia, pero no conceptualmente para que sirve y cómo se usa.

Así se ve luego herencias por todos lados con la única finalidad de reusar código.
__________________
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 08:57.