如何在不事先知道的情况下将数组成员提取到单个参数中?

时间:2011-08-02 17:21:44

标签: php eval

我为项目编写了某种全局记录器类,并希望使用辅助函数访问内部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]

3 个答案:

答案 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