PHP: call_user_func_array: передача по ссылке - PullRequest
6 голосов
/ 15 декабря 2009

Следующая функция генерирует ошибку, когда функция содержит аргументы, на которые ссылаются, например:

function test(&$arg, &$arg2)
{
  // some code
}

Теперь я не могу использовать call_user_func_array для вышеуказанной функции, она выдаст ошибку.

Как решить эту проблему?

Мне нужно использовать call_user_func_array.

Также предположим, что я не знаю заранее, переданы ли они по ссылке или по значению.

Спасибо

Ответы [ 2 ]

21 голосов
/ 15 декабря 2009

При сохранении ваших параметров в массиве, убедитесь, что вы храните ссылку на эти параметры, она должна работать нормально.

Т.е.:

call_user_func_array("test", array(&param1, &param2));
7 голосов
/ 19 августа 2013

Отличный обходной путь был размещен на http://www.php.net/manual/de/function.call-user-func-array.php#91503

function executeHook($name, $type='hooks'){ 
    $args = func_get_args(); 
    array_shift($args); 
    array_shift($args); 
    //Rather stupid Hack for the call_user_func_array(); 
    $Args = array(); 
    foreach($args as $k => &$arg){ 
        $Args[$k] = &$arg; 
    } 
    //End Hack 
    $hooks = &$this->$type; 
    if(!isset($hooks[$name])) return false; 
    $hook = $hooks[$name]; 
    call_user_func_array($hook, $Args); 
} 

Фактический взлом окружен комментариями.

...