No hay forma de obtener las variables de las personas que llaman, pero puede obtener sus argumentos. Esto se hace fácilmente con debug_backtrace()
:
<?php
class DebugTest
{
public static function testFunc($arg1, $arg2) {
return self::getTrace();
}
private static function getTrace() {
$trace = debug_backtrace();
return sprintf(
"This trace function was called by %s (%s:%d) with %d %s: %s\n",
$trace[1]["function"],
$trace[1]["file"],
$trace[1]["line"],
count($trace[1]["args"]),
count($trace[1]["args"]) === 1 ? "argument" : "arguments",
implode(", ", $trace[1]["args"])
);
}
}
echo DebugTest::testFunc("foo", "bar");
La ejecución de este programa, se obtiene este resultado:
This trace function was called by testFunc (/Users/mike/debug.php:23) with 2 arguments: foo, bar
debug_backtrace()
devuelve una matriz; El elemento 0 es la función en la que se llamó a la función, por lo que usamos el elemento 1 en el ejemplo. Puede usar un ciclo para recorrer todo el camino de regreso hacia arriba.
Si * pudieras * hacer esto, eventualmente te darías cuenta de la mala idea que es (de todos modos, fuera del registro). – Nicole
@Renesis: No solo eso. Ser capaz de obtener el alcance de la llamada sería completamente contrario al propósito de pasar los parámetros. – pyon
No creo que sea posible obtener las variables definidas en los marcos de pila debajo del superior. – GWW