PHP:参照可变长度参数列表?
题
是否有可能创造一个PHP函数,通过引用采用可变数目的参数个个?
它没有帮助我,通过参考接收值的阵列,也不是取它的参数包裹在一个对象,因为我正在功能组合物和参数结合的功能的功能。 不要去想通话时传递的引用无论是。这件事甚至不应该存在的。
解决方案
5.6 PHP引入新可变参数的语法一>它支持通过按引用。 (感谢@outis为更新)
function foo(&...$args) {
$args[0] = 'bar';
}
有关PHP 5.5或降低可以使用下面的特技:
function foo(&$param0 = null, &$param1 = null, &$param2 = null, &$param3 = null, &$param4 = null, &$param5 = null) {
$argc = func_num_args();
for ($i = 0; $i < $argc; $i++) {
$name = 'param'.$i;
$params[] = & $$name;
}
// do something
}
不足之处是的论点,即数由参数所定义(6中的示例代码片段)的数目限制。 但与func_num_args()如果还需要更多你可以检测。
传递超过7个参数的函数是不好的做法无论如何;)
其他提示
5.6 PHP引入新可变参数的语法支持通过按引用。最后一个参数前缀与...
函数声明为一个数组,将持有的任何实际的参数,从这一点上。该阵列可被声明通过进一步前缀与...
的&
令牌持有的引用,如为其他参数进行,有效地使参数传递逐参考文献
实施例1:
function foo(&...$args) {
$args[0] = 'bar';
}
foo($a);
echo $a, "\n";
# output:
#a
实施例2:
function number(&...$args) {
foreach ($args as $k => &$v) {
$v = $k;
}
}
number($zero, $one, $two);
echo "$zero, $one, $two\n";
# output:
#0, 1, 2
您应该能够通过所有的参数包裹在对象的
Class A
{
public $var = 1;
}
function f($a)
{
$a->var = 2;
}
$o = new A;
printf("\$o->var: %s\n", $o->var);
f($o);
printf("\$o->var: %s\n", $o->var);
应打印 1 2
它是可能的:
$test = 'foo';
$test2 = 'bar';
function test(){
$backtrace = debug_backtrace();
foreach($backtrace[0]['args'] as &$arg)
$arg .= 'baz';
}
test(&$test, &$test2);
然而,这由被弃用参考使用呼叫时通
编辑:对不起,我没有看到你想让他们引用....所有你需要做的就是将它们作为一个对象
您还可以通过他们在例如阵列
myfunction(array('var1' => 'value1', 'var2' => 'value2'));
然后在功能你只需
myfunction ($arguments) {
echo $arguments['var1'];
echo $arguments['var2'];
}
所述阵列也可以嵌套。
不隶属于 StackOverflow