Как извлечь элементы массива в отдельные параметры, не зная их заранее? - PullRequest
0 голосов
/ 02 августа 2011

Я написал какой-то глобальный класс logger для проекта и хочу получить доступ к внутреннему методу log () с помощью вспомогательной функции.Метод log () использует vsprintf для простого форматирования сообщений.Это работает нормально, но теперь я сталкиваюсь с трудностями при передаче параметров из вспомогательной функции в метод 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 ]

1 голос
/ 02 августа 2011

Это, я думаю, должно сработать

function writeLog($severity, $message) {
    $args = func_get_args();
    $logger = Logger::getLogger();
    call_user_func_array(array(logger, 'log'), $args);
}
1 голос
/ 02 августа 2011

Это не так, как eval() / передача аргумента работает.

Что вы, вероятно, хотите, это что-то вроде call_user_func_array().

0 голосов
/ 02 августа 2011

Попробуйте:

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

...