在PHP中解包参数数组

38

Python提供了"*"操作符,用于对元组列表进行解包,并将其作为参数传递给函数,例如:

args = [3, 6]
range(*args)            # call with arguments unpacked from a list

这相当于:

range(3, 6)

有人知道在PHP中是否有实现这一点的方法吗?尝试使用“PHP Unpack”的不同变体进行搜索并没有立即找到任何东西...也许在PHP中它被称为不同的名称?

5个回答

43

php5.6 中添加了通过...(展开运算符)参数展开。使用它,您可以使用这种更简单的替代方法来摆脱call_user_func_array()。例如,有一个函数:

function add($a, $b){
  return $a + $b;
}

使用数组 $list = [4, 6]; (PHP5.5之后您可以这样声明数组)。

您可以使用 ... 调用您的函数:

echo add(...$list);

21
你可以使用call_user_func_array()来实现这一点:

call_user_func_array("range", $args);可以使用你的例子。


2
这看起来像是一个旧答案 - 现在使用参数解包运算符可能更合适,参见@Salvador Dali的答案。 - jgivoni
同意@jgivoni的观点。PHP中的一般趋势,首先在7中看到,现在在PHP 8中,是远离不受控制的函数,如call_user_func_array()func_get_args()等,转而使用可变参数运算符“...”。现在...如果有人能告诉我如何在Python中实现这个功能,我将不胜感激:$m = 'getName'; $name = $obj->$m(); - dougB

9
在某些情况下,你可能会考虑使用 unpacking。在php中,这种方式类似于python:
list($min, $max) = [3, 6];
range($min, $max);

这至少是我得出答案的方式。 谷歌搜索:PHP参数解包

1
非常好。我在考虑($min, $max){$min, $max}。但是list才是我要找的。 - ferdynator

3

2
<?php

function add(int ...$arr) {           // typehint ready
    return array_sum($arr);
}

var_dump(add(1, 2, 3, ...[1, 2, 3])); // int(12)

使用...运算符的另一个示例。
RFC:https://wiki.php.net/rfc/variadics


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接