Ver Mensaje Individual
  #6 (permalink)  
Antiguo 03/06/2009, 21:24
califa010
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 11 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