我正在编写一个日志记录类,我想添加一个方便函数来记录调用它的函数的参数。有点复杂,所以这里有一些代码:
function MyFunc($arg1, $arg2) {
global $oLog;
$oLog->logArgs();
}
因此,我可以使用debug_backtrace()获取调用函数(MyFunc)的名称。我有兴趣获取参数的名称和值,最好不必在对logArgs()的调用中添加func_get_args()。
我知道这是一个很高的订单,但PHP继续让我感到惊讶,所以我把它放在那里,以防万一。
感谢。
答案 0 :(得分:1)
你可以用反射来做到这一点:
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]
}
这个特定的实现不适用于闭包,但它适用于全局函数和类方法。