PHP:通过引用列出可变长度的参数列表?
2022-08-30 16:12:01
是否可以创建一个 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()可以检测到是否需要更多。
无论如何,将超过7个参数传递给函数都是不好的做法;)
PHP 5.6 引入了一种新的可变参数语法,支持按引用传递。将函数的最后一个参数作为前缀,将其声明为一个数组,该数组将保存从那时起的任何实际参数。可以通过进一步在标记前面加上一个 来声明数组来保存引用,就像对其他参数所做的那样,有效地使参数通过 ref 传递。...
...
&
示例 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