我正在研究一个日志记录类,我想添加一个方便的函数,该函数将记录调用它的函数的参数。有点复杂,所以这里有一些代码:
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]
}
此特定实现不适用于闭包,但它适用于全局函数和类方法。