我看过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),但我只是在检查专家是怎么想的。
使用第一个版本,因为它的工作原理。后者甚至没有使用PHP 5.3(或者你的例子为你工作?),无论如何将被PHP 5.4拒绝(Zend memleaks强制传递引用)。 – mario 2012-01-14 18:24:43