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

2022-08-30 11:13:00

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

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

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

答案 1

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

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

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

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


答案 2

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

您是否可以接受必须将有问题的变量嵌入到对象中?如果您这样做,代码将(在某种程度上)看起来像这样。

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

只需确保调用函数从不对对象变量本身进行赋值 - 或者这将导致函数基本上丢失引用。函数所做的任何赋值语句都必须严格针对对象的内容


推荐