Подтвердить что ты не робот

Почему появляется ошибка "ожидается, что эта ссылка, значение задано"?

Он срабатывает, когда я пытаюсь вызвать функцию с аргументом по ссылке

function test(&$a) ...

через

call_user_func('test', $b);
4b9b3361

Ответ 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().