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 C {
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