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

¿es posible saber desde qué método ha sido llamado otro?

Estas en el tema de ¿es posible saber desde qué método ha sido llamado otro? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola Así de simple, ¿es posible saber desde qué método ha sido llamado otro método? ... Tengo varios métodos que recuperan información del mismo tipo, ...
  #1 (permalink)  
Antiguo 28/05/2009, 15:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 12
Antigüedad: 15 años, 6 meses
Puntos: 0
¿es posible saber desde qué método ha sido llamado otro?

Hola

Así de simple, ¿es posible saber desde qué método ha sido llamado otro método? ...

Tengo varios métodos que recuperan información del mismo tipo, pero ahora en un método en particular pretendo como aplicar un filtro a los valores. Sé que puedo pasar un parámetro a la función, pero creo que si hubiera una manera de hacer esto sería mucho más simple y practico, pues me enfoco en el método, no en sus llamados ...

Código php:
Ver original
  1. <?php
  2.  
  3. class Prueba
  4. {
  5.     public function getUnaCosa()
  6.     {
  7.          $valores = $this->_getValores();
  8.          // hace algo con $valores
  9.     }
  10.  
  11.     public function getOtraCosa()
  12.     {
  13.         $valores = $this->_getValores();
  14.         // hace algo con $valores
  15.     }
  16.  
  17.     private function _getValores()
  18.     {
  19.         $llamado = algunaFormaDeSaberDeDondeSeLlamo();
  20.         if ($llamado === 'getUnaCosa') {
  21.             return filtro($valores);
  22.         } else {
  23.              return $valores;
  24.         }
  25.     }
  26. }
  #2 (permalink)  
Antiguo 29/05/2009, 09:23
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 19 años, 2 meses
Puntos: 55
Respuesta: ¿es posible saber desde qué método ha sido llamado otro?

probablemente halla algo yo no lo conozco, pero para salir rapidamente del problema podes hacer lo siguiente

Código PHP:
<?php
 
class Prueba
{
    public function 
getUnaCosa()
    {
         
$valores $this->_getValores('getUnaCosa');
         
// hace algo con $valores
    
}
 
    public function 
getOtraCosa()
    {
        
$valores $this->_getValores('getOtraCosa');
        
// hace algo con $valores
    
}
 
    private function 
_getValores($llamado)
    {
//        $llamado = algunaFormaDeSaberDeDondeSeLlamo();
        
if ($llamado === 'getUnaCosa') {
            return 
filtro($valores);
        } else {
             return 
$valores;
        }
    }
}
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 29/05/2009, 16:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: ¿es posible saber desde qué método ha sido llamado otro?

Puedes usar el API de Reflectión pero no se si alcanze a decirte desde que método fue llamado sin lanzar una excepción directa, creo la opción más rápida es la que te dice emiliodeg.

Saludos.
  #4 (permalink)  
Antiguo 30/05/2009, 08:41
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: ¿es posible saber desde qué método ha sido llamado otro?

Que tal utilizando la constante __METHOD__ ?
__________________
I see dead pixels
  #5 (permalink)  
Antiguo 30/05/2009, 08:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ¿es posible saber desde qué método ha sido llamado otro?

__METHOD__ si devuelve el nombre del método, pero solo funciona para el método donde se llame...

osea, si tu método se llama foo() y usas __METHOD__ dentro de este método va a devolver foo

lee el manual
http://usphp.com/manual/en/language....predefined.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 03/06/2009, 20:24
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 10 meses
Puntos: 5
Respuesta: ¿es posible saber desde qué método ha sido llamado otro?

Una forma, tal vez no la más elegante, es como sugirió Gatorv, usar excepciones. Aunque no es necesario el try/catch, con sólo crear una instancia alcanza para obtener un trace de la pila de llamadas. (Para ver los atributos de Exception: http://us2.php.net/manual/en/languag....extending.php)

La función / método donde se crea la excepción va a estar en la posición 0, la que lo llamó en la 1 y así sucesivamente.

Podrías hacer algo así:


Código PHP:
class {

    function 
f1() {
        
$this->f2();
    }

    function 
f2() {
        
$caller Util::getCaller();

        echo 
"CALLER: " $caller['class'] . "::" $caller['function'] . '<br>';
    }


}

class 
Util {
    function 
getCaller() {
        
$ex     = new Exception();
        
$trace  $ex->getTrace();
        
// $trace[0] es esta función
        // $trace[1] es la función que llamó a getCaller para saber quién la llamó
        // $trace[2] es la función que se busca
        
return $trace[2]; 
    }
}

    
$o = new C();
$o->f1(); 

Saludos
Juan Pablo Califano
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 06:31.