Почему появляется ошибка "ожидается, что эта ссылка, значение задано"?
Он срабатывает, когда я пытаюсь вызвать функцию с аргументом по ссылке
function test(&$a) ...
через
call_user_func('test', $b);
Ответы
Ответ 1
call_user_func
может только передавать параметры по значению, а не по ссылке. Если вы хотите перейти по ссылке, вам нужно вызвать функцию напрямую или использовать call_user_func_array
, который принимает ссылки (однако это может не сработать в PHP 5.3 и более поздних версиях, в зависимости от того, на какую часть руководства смотрят).
Ответ 2
Из руководства для call_user_func()
Обратите внимание, что параметры для call_user_func() не передаются по ссылке.
Итак, есть ответ. Тем не менее, есть способ обойти это, снова прочитав руководство
call_user_func_array('test', array(&$b));
Должен иметь возможность передать его по ссылке.
Ответ 3
У меня была одна и та же проблема, меняя (в моем случае):
$result = call_user_func($this->_eventHandler[$handlerName][$i], $this, $event);
к
$result = call_user_func($this->_eventHandler[$handlerName][$i], &$this, &$event);
похоже, отлично работает в php 5.3.
Это даже не обходное решение, я думаю, он просто делает то, что сказано: -)
Ответ 4
Вам нужно установить переменную равной результату функции, например...
$b = call_user_func('test', $b);
и функция должна быть записана следующим образом:
function test($a) {
...
return $a
}
Другой проход по эталонной работе-раунды устарел.
Ответ 5
Вы могли бы рассмотреть концепцию замыкания со ссылочной переменной, скрытой в объявлении "use". Например:
$note = 'before';
$cbl = function( $msg ) use ( &$note )
{
echo "Inside callable with $note and $msg\n";
$note = "$msg has been noted";
};
call_user_func( $cbl, 'after' );
echo "$note\n";
Обходной путь для вашей первоначальной проблемы, но если у вас есть функция, которая требует вызова по ссылке, вы можете обернуть вызываемое закрытие вокруг нее, а затем выполнить закрытие с помощью call_user_func().