我为项目编写了某种全局记录器类,并希望使用辅助函数访问内部log()方法。 log()方法使用vsprintf来允许简单的消息格式化。这很好,但是现在我在将辅助函数中的参数传递给logger的log()方法时遇到了困难。
function writeLog($severity, $message)
{
$args = func_get_args();
$arg_string = '';
foreach ($args as $k => $v)
{
$arg_string .= '$args['.$k.'], ';
}
$arg_string = substr($arg_string, 0, -2);
Logger::getLogger()->log(eval($arg_string));
}
在我看来,在这些参数字符串上使用eval()
应该做我想要的。但不知何故,我一直收到像Parse error: syntax error, unexpected ',' in Logger.php(19) : eval()'d code on line 1
这样的错误
(生成的参数字符串类似于$args[0], $args[1], $args[2]
)
答案 0 :(得分:1)
这不是eval()
/参数传递的工作方式。
您可能想要的是call_user_func_array()
。
答案 1 :(得分:1)
我认为,应该这样做
function writeLog($severity, $message) {
$args = func_get_args();
$logger = Logger::getLogger();
call_user_func_array(array(logger, 'log'), $args);
}
答案 2 :(得分:0)
试试这个:
function writeLog($severity, $message) {
$args = func_get_args();
call_user_func_array(array(Logger::getLogger(), 'log'), $args)
}
文档:http://www.php.net/manual/en/function.call-user-func-array.php