2010-09-03 16 views

回答

39

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

+0

@Artefacto我最初没有这样做,因为该手册指出它不是5.3中的情况,但我更新了我的答案。 – 2010-09-03 19:41:23

+0

我会直接调用它,因为我刚才有一个脚本在我的服务器上用“call_user_func_array”正常工作的情况,但是对于我的客户端它会引发错误(我使用5.3.x,他也一定是)。所以它似乎有点触摸和去。 – 2012-04-12 10:00:58

16

从手册call_user_func()

注意,对于call_user_func()的参数不被引用传递。

所以,你有答案。然而,在它周围有一个方式,通过manual

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

再次阅读应该可以通过引用传递它。

+0

但是,根据手册,该解决方法只能在PHP 5.3之前运行。 – 2010-09-03 15:31:13

+0

是的,这是真的,所以它可能是最好的避免使用该方法,因为它不会向前兼容。 – 2010-09-03 15:35:16

+1

>注意这对于PHP> 5.3.0不起作用,所以请谨慎使用它。 但是我只是尝试了PHP 5.3.3,它没有任何警告/通知。 其似乎call_user_func_array隐藏错误。 – noxvile 2010-09-03 15:39:04

4

我刚刚有同样的问题,改变(对我来说):

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

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

似乎工作在PHP 5.3就好了。

它甚至不是一种解决方法,我认为,它只是做的是告诉:-)

+0

不赞成使用的方法。 – 2018-03-08 09:52:31

4

您需要设置变量等于函数的结果,像这样......

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

和功能应该写入如下...

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

其他通过引用传递工作一回合已被弃用。

相关问题