2012-01-14 75 views
1

我看过Is it possible to pass parameters by reference using call_user_func_array()?http://php.net/manual/en/function.call-user-func-array.php。使用call_user_func_array()通过引用传递的批准技术似乎是通过使参数数组成为一个变量引用数组。例如,设置$parameters = array(&$some_variable)。我的问题是,我们可以改为使参数数组为变量数组(而不是引用),并将整个参数数组作为参考来代替?这如下所示:我们可以通过引用传递参数数组来传递call_user_func_array()而不是传递一个变量引用数组吗?

function toBeCalled(&$parameter1, $parameter2) { 
    //...Do Something... 
} 

$changingVar = 'passThis'; 
$changingVar2 = 'passThisToo'; 
$parameters = array($changingVar, $changingVar2); 
call_user_func_array('toBeCalled', &$parameters); 

注意,函数toBeCalled预计第一可变作为参考,和第二过程作为中值。我之所以问这个问题,是因为这里的语法很方便,而且看起来很有用(请参阅Drupal的DruTex模块的这个PHP 5.3补丁 - http://drupal.org/node/730940#comment-4054054),但我只是在检查专家是怎么想的。

+0

使用第一个版本,因为它的工作原理。后者甚至没有使用PHP 5.3(或者你的例子为你工作?),无论如何将被PHP 5.4拒绝(Zend memleaks强制传递引用)。 – mario 2012-01-14 18:24:43

回答

0

你不能,因为你把东西放入一个数组而不是通过引用,它们被复制。所以不管你事后对数组做了什么,它都不会影响你放入的原始变量(如果它们甚至是变量的话)。

您链接的东西似乎不相关。它正在消除毫无意义的通话时间通过引用。

+0

感谢@newacct,您将事情复制到数组中有助于明确call_user_func_array为什么需要引用元素(乍一看似乎违反了对引用时间传递的限制)。 试验后: ''。$ x1); echo('
'。$ x2); ?>' 返回错误。 – 2012-01-16 19:39:33