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

Php 是否可以使用call_user_func_array()通过引用传递参数?,php,reference,callback,Php,Reference,Callback,使用call\u user\u func\u array()时,我希望通过引用传递参数。我该怎么做呢。比如说 function toBeCalled( &$parameter ) { //...Do Something... } $changingVar = 'passThis'; $parameters = array( $changingVar ); call_user_func_array( 'toBeCalled', $parameters ); 要使用call\u

使用
call\u user\u func\u array()
时,我希望通过引用传递参数。我该怎么做呢。比如说

function toBeCalled( &$parameter ) {
    //...Do Something...
}

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

要使用
call\u user\u func\u array()
通过引用传递,数组中的参数必须是引用-它不取决于函数定义是否通过引用传递。例如,这将起作用:

function toBeCalled( &$parameter ) {
    //...Do Something...
}

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

有关详细信息,请参阅上的注释。

除非您在此处使用不推荐的功能。您将在PHP5中生成一个警告,使其不太完美

警告:按引用传递调用时间已被弃用;如果希望通过引用传递,请修改运行时函数名的声明。如果您想启用调用时间按引用传递,您可以在您的INI文件中将allow_call_time_pass_reference设置为true,该文件位于


不幸的是,据我所知,似乎没有任何其他选择。

直接来说,这可能是不可能的——但是,如果您对正在实现的函数和调用它的代码都有控制权,那么您可能会发现有一种解决方法是合适的

您是否可以将相关变量嵌入到对象中?如果这样做,代码看起来(有点)像这样

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中的对象变量只是对对象内容的引用——因此,如果将对象传递给函数,函数对对象内容所做的任何更改都将反映在调用函数所访问的内容中


只需确保调用函数从未对对象变量本身进行赋值,否则会导致函数基本上失去引用。函数所做的任何赋值语句都必须严格针对对象的内容。

这是通过双重引用实现的,修改$parameter变量时会修改原始变量

$a = 2;
$a = toBeCalled($a);
echo $a //50

function toBeCalled( &$par_ref ) {
    $parameter = &$par_ref;
    $parameter = $parameter*25;
}

我只是试着用PHP5.2.9来做这件事,但没有收到任何警告。我想你可能会被array()不是真正的函数这一事实弄糊涂了——我在代码示例中所做的基本上是设置
$parameters[0]=&$changingVar
。因此,它不是按引用传递调用时间-按引用传递是在方法签名中指定的。这只适用于直接函数调用<代码>数组()不是函数。从PHP5.5开始,在数组中放置引用是很正常的。请记住,PHP5.5(?)不赞成通过引用传递
new
,因此
$foo=&new ReferenceObject
不再被允许。此解决方案在严格启用的情况下发出警告。。。“已弃用:调用时间传递引用在”我不知道php的更新版本,但在我的5.3.3服务器上,当我使用
Call\u user\u func(“函数”和$parameter)
时,我收到了弃用的消息。当我切换到
call\u user\u func\u array
时,它解决了这个问题。然后我检查了STRICT enabled,但仍然没有得到消息,所以我认为这是一种可以接受的方法。我做了一个代码测试,我在PHP4.3.0-7.4.0中为我工作,即使我启用了STRICT@自己看