当我尝试通过引用调用带参数的函数时它会激活
function test(&$a) ...
通过
call_user_func('test', $b);
答案 0 :(得分:45)
call_user_func
可以仅按值传递参数,而不是按引用传递参数。如果你想通过引用传递,你需要直接调用函数,或者使用接受引用的call_user_func_array
(但是这可能不适用于PHP 5.3及更高版本,具体取决于手册的哪个部分)。
答案 1 :(得分:19)
请注意,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()执行闭包。