46

使用时call_user_func_array()我想通过引用传递参数。我该怎么做。例如

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

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

4 回答 4

56

要通过引用传递 using call_user_func_array(),数组中的参数必须是引用 - 它是否通过引用传递并不取决于函数定义。例如,这将起作用:

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

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

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

于 2008-11-17T06:46:27.850 回答
1

直接地,这可能是不可能的——但是,如果你可以控制你正在实现的函数调用它的代码——那么有一个你可能会发现合适的解决方法。

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

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

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

于 2015-08-12T18:21:04.120 回答
0

这是通过双重引用来工作的,当修改 $parameter 变量时会修改原始变量。

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

function toBeCalled( &$par_ref ) {
    $parameter = &$par_ref;
    $parameter = $parameter*25;
}
于 2017-02-08T20:28:26.680 回答
-2

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

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

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

于 2009-09-08T12:57:06.560 回答