是否有可能通过引用传递参数使用call_user_func_array()?

当使用call_user_func_array()我想通过引用传递参数。 我将如何做到这一点。 例如

 function toBeCalled( &$parameter ) { //...Do Something... } $changingVar = 'passThis'; $parameters = array( $changingVar ); call_user_func_array( 'toBeCalled', $parameters ); 

要使用call_user_func_array()通过引用传递,数组中的参数必须是引用 – 它不依赖于函数定义,而不pipe它是否通过引用传递。 例如,这将工作:

 function toBeCalled( &$parameter ) { //...Do Something... } $changingVar = 'passThis'; $parameters = array( &$changingVar ); call_user_func_array( 'toBeCalled', $parameters ); 

有关更多信息,请参阅call_user_func_array()函数文档中的注释。

直接来说,这可能是不可能的 – 但是,如果您对正在实现的function以及 调用它的代码都有控制权,那么您可能会find一种适合的解决方法。

你是否可以将有问题的variablesembedded到对象中? 如果你这样做的话,代码会看起来像这样。

 function toBeCalled( $par_ref ) { $parameter = $par_ref->parameter; //...Do Something... $par_ref->parameter = $parameter; } $changingVar = 'passThis'; $parembed = new stdClass; // Creates an empty object $parembed->parameter = array( $changingVar ); call_user_func_array( 'toBeCalled', $parembed ); 

你看,PHP中的一个对象variables只是对象内容的一个引用 —所以如果你传递一个对象给一个函数,那么函数对对象内容的任何改变都会反映在调用函数也可以访问。

只要确保调用函数永远不会对对象variables本身进行赋值 – 否则会导致函数基本上失去引用。 该函数所做的任何赋值语句都必须严格对该对象的内容

这可以通过双引用来工作,当$ parametervariables被修改时,原始variables被修改。

 $a = 2; $a = toBeCalled($a); echo $a //50 function toBeCalled( &$par_ref ) { $parameter = &$par_ref; $parameter = $parameter*25; } 

除了你在这里使用不赞成的function。 您将在PHP5中产生一个警告,使其不够完美。

警告:通过引用的调用时间已被弃用; 如果您想通过引用传递它,请修改运行时函数名称的声明。 如果你想启用呼叫时传递参考,你可以设置allow_call_time_pass_reference为true在你的INI文件…

不幸的是,据我所知,似乎没有其他select。