在 PHP 中获取调用函数的参数


Getting a Calling Function's Arguments in PHP

我正在研究一个日志记录类,我想添加一个方便的函数,该函数将记录调用它的函数的参数。有点复杂,所以这里有一些代码:

function MyFunc($arg1, $arg2) {
   global $oLog;
   $oLog->logArgs();
}

因此,我可以使用 debug_backtrace() 获取调用函数 (MyFunc) 的名称。我对获取参数的名称和值感兴趣,最好不必在对 logArgs() 的调用中添加 func_get_args()。

我知道这是一个艰巨的任务,但PHP继续让我感到惊讶,所以我把它放在那里,以防万一。

谢谢。

您可以通过反射来执行此操作:

function logger()
{
    $bt = debug_backtrace();
    $previous = $bt[1];
    if(empty($previous['class'])) {
        $fn = new ReflectionFunction($previous['function']);
    } else {
        $class = new ReflectionClass($previous['class']);
        $fn = $class->getMethod($previous['function']);
    }
    $parameters = $fn->getParameters();
    //Get a parameter name with $parameters[$paramNum]->getName()
    //Get the value from $previous['args'][$paramNum]
}

此特定实现不适用于闭包,但它适用于全局函数和类方法。