是否可以创建一个PHP函数,接收可变数量的参数并且所有参数都通过引用传递?
对我来说,接收值数组的引用或者将参数封装在对象中的函数都没有什么帮助,因为我正在处理函数组合和参数绑定。不要考虑调用时的引用传递。那东西根本不应该存在。
是否可以创建一个PHP函数,接收可变数量的参数并且所有参数都通过引用传递?
对我来说,接收值数组的引用或者将参数封装在对象中的函数都没有什么帮助,因为我正在处理函数组合和参数绑定。不要考虑调用时的引用传递。那东西根本不应该存在。
PHP 5.6引入了新的可变参数语法,支持通过引用传递。(感谢@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()函数可以检测是否需要更多参数。...
,将其声明为一个数组,该数组将保存从那一点开始的任何实际参数。可以通过进一步在 ...
标记前加上 &
来声明数组保存引用,就像对其他参数所做的那样,有效地使参数按引用传递。
示例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
foreach ($args as $k => $v)
中,在 $v
前面没有使用 &
对我来说也可以工作。 - Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ你应该能够将所有参数封装在一个对象中传递。
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'];
}
数组也可以嵌套。