为什么出现错误“预计会成为参考,给定值”?

时间:2010-09-03 15:19:41

标签: php

当我尝试通过引用调用带参数的函数时它会激活

function test(&$a) ...

通过

call_user_func('test', $b);

5 个答案:

答案 0 :(得分:45)

call_user_func可以按值传递参数,而不是按引用传递参数。如果你想通过引用传递,你需要直接调用函数,或者使用接受引用的call_user_func_array(但是这可能不适用于PHP 5.3及更高版本,具体取决于手册的哪个部分)。

答案 1 :(得分:19)

来自call_user_func()

的手册
  

请注意,call_user_func()的参数不会通过引用传递。

所以,是的,有你的答案。但是,有一种解决方法,再次阅读manual

call_user_func_array('test', array(&$b));

应该可以通过引用传递它。

答案 2 :(得分:4)

我刚遇到同样的问题,改变了(在我的情况下):

$result = call_user_func($this->_eventHandler[$handlerName][$i], $this, $event);

$result = call_user_func($this->_eventHandler[$handlerName][$i], &$this, &$event);

似乎在php 5.3中运行得很好。

我认为这甚至不是一种解决方法,它只是做了所说的: - )

答案 3 :(得分:4)

您需要将变量设置为等于函数的结果,如此...

$b = call_user_func('test', $b);

并且函数应该写成如下......

function test($a) {
    ...
    return $a
}

不推荐通过引用work-a-rounds传递另一个。

答案 4 :(得分:0)

您可能会考虑在闭包概念中将引用变量塞入“ 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()执行闭包。