【问题标题】:Pass by reference, with a variable numbers of parameters in PHP?通过引用传递,在 PHP 中具有可变数量的参数?
【发布时间】:2012-07-21 21:07:00
【问题描述】:

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

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

这样当我通过引用my_function 传递东西时,my_other_function 也通过引用获取它们。

有没有办法做到这一点?

【问题讨论】:

  • 嗯... func_get_args ?不,它没有工作
  • 是的,问题是如果我按原样使用它,通过引用传递的值将通过复制传递给另一个函数。

标签: php pass-by-reference


【解决方案1】:

我想知道你为什么需要这个。一般是references are bad 在 PHP 中。

如果您真的想这样做,唯一正确的方法(忽略调用时传递引用的技巧,无论如何它不再适用于 PHP 5.4)是使用包装参数的数组:

function myfunc(array $data) {
    $data[0] += 42;
    /* ... */
}

$var = 0;
myfunc(array(&$var /*, ... */));
echo $var; // prints 42

为了传递给其他函数,您可以使用call_user_func_array()

【讨论】:

  • 太好了,这对我有用。至于我为什么使用它,这是针对我框架中的一些元编程功能。
  • 仍然引用似乎是错误的解决方案。也许包装必须在对象中更改的东西? (记住对象是通过句柄传递的——感觉就像是通过引用传递它们)
【解决方案2】:

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

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 already wrote,对于可变数量的参数在 PHP 中的引用没有很好的支持(谁知道更好)。 func_get_argsDocs 例如不适用于引用。

而是利用建议通过数组参数传递所有引用。这行得通。

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

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2013-11-13
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多