通过引用传递,在PHP中具有可变数量的参数


Pass by reference, with a variable numbers of parameters in PHP?

我有一个函数,它接受可变数量的参数,我必须通过引用将它们传递给另一个函数。

function my_function($arg0, $arg1, $arg2, ...)
{
    my_other_function(&$arg0, &$arg1, &$arg2, ...); 
}

所以当我通过引用传递给my_function时,my_other_function也通过引用获得它们。

有办法做到这一点吗?

我想知道你为什么需要这个。一般来说,PHP中的引用是不好的。

如果你真的想这样做,唯一正确的方法(忽略ref hacks传递的调用时间,这无论如何都不能再与PHP 5.4一起使用)是使用一个数组来包装参数:

function myfunc(array $data) {
    $data[0] += 42;
    /* ... */
}
$var = 0;
myfunc(array(&$var /*, ... */));
echo $var; // prints 42

为了传递给另一个函数,您可以使用call_user_func_array()

从技术上讲,您没有这样做:

function my_function($arg0, $arg1, $arg2, ...)
{
    my_other_function(&$arg0, &$arg1, &$arg2, ...); 
}

但是这个:

function my_function(&$arg0, &$arg1, &$arg2, ...)
{
    my_other_function($arg0, $arg1, $arg2, ...); 
}

然而,正如@johannes已经写过的那样,对于PHP中引用的可变数量的参数没有很好的支持(谁知道得更好)。例如,func_get_argsDocs不适用于引用。

相反,使用该建议通过数组参数传递所有引用。这很管用。

function my_function(array $args)
{
    my_other_function($args); 
}