获取调用函数';PHP中的s参数

获取调用函数';PHP中的s参数,php,function,arguments,Php,Function,Arguments,我正在处理一个日志类,我想添加一个方便的函数,它将记录调用它的函数的参数。有点复杂,下面是一些代码: function MyFunc($arg1, $arg2) { global $oLog; $oLog->logArgs(); } 因此,我可以使用debug_backtrace()获取调用函数(MyFunc)的名称。我对获取参数的名称和值感兴趣,最好不必在对logArgs()的调用中添加func_get_args() 我知道这是一个很高的要求,但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]
}

这个特定的实现不会与闭包一起工作,但它将与全局函数和类方法一起工作。

非常感谢@jbfeet。“我很快就会试试这个。只是测试了一下,它就是你说的所有东西,还有更多,”jb说。再次感谢。