2013-03-10 67 views
4

我知道您可以将可变数量的参数传递给函数并单独访问它们。PHP - 通过引用传递可变数量的参数

例如

function foo() 
{ 
    $arg = func_get_arg(0); 
    $arg += 10; 
} 

$a = 100; 

foo($a); 

echo "A is $a\n"; 

但是,这些参数通过值传递如上所示。

是否有可能使用它们,就像它们通过引用以类似的方式通过mysqli库中的bind_param一样?

+0

也许http://php.net/manual/en/function.func-get-arg.php,例如#3,可以帮助你 – Amir 2013-03-10 11:48:37

+0

@Amir示例3对变量数量的参数没有帮助,因为通常会从方法签名中省略这些参数,所以不能用&表示它们。 – Gordon 2013-03-10 12:42:07

回答

1

我想提的第一件事:Don't use references。除此之外:直接做这件事是不可能的,因为引擎在调用函数之前必须知道某件事是否是引用。你可以做的是通过引用数组:

$a = 1; $b = 2; $c = 3; 
$parameters = array(&$a, &$b, &$c, /*...*/); 
func($parameters); 

function func(array $params) { 
    $params[0]++; 
} 
+2

如果你知道你在做什么(并且我会实现一个可以在完成时修改多个参数的函数),那么引用没有任何问题。任何足够的插件为您的网站。 – 2013-03-10 12:19:38

+1

在99%的案例中,有比使用参考更好的设计。例如使用面向对象的设计。面向对象的设计可以更清洁,更易维护,尤其是PHP 5.4,速度更快,所需内存更少。 – johannes 2013-03-10 12:32:53

+3

99%从哪里来? – 2013-03-10 12:48:29

1

你不能,只是你不能告诉PHP,这是通过引用,而不是,但!我建议做以下几点:

function foo() 
{ 
    $arg = func_get_arg(0); 
    $arg->val += 10; 
} 
$a =new stdClass(); 
$a->val = 100; 
foo($a); 
echo "$a\n"; // 110 

你可以申请拳击到你想要的价值和它的作品, 希望对您有所帮助,如果您有任何疑问请询问。

+1

@Nathaniel:不要进行添加大量额外信息的编辑。在评论中或在新的答案中这样做。 – Emil 2013-03-10 13:17:42

+0

我同意你@Emil – Hilmi 2013-03-11 08:42:44