在php中解压缩参数数组

时间:2008-11-16 20:05:43

标签: php python arguments iterable-unpacking

Python提供了“*”运算符,用于解压缩元组列表并将它们作为参数提供给函数,如下所示:

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

这相当于:

range(3, 6)

有谁知道在PHP中是否有办法实现这一目标?一些谷歌搜索“PHP解包”的变化并没有立即发现任何东西..也许它在PHP中被称为不同的东西?

5 个答案:

答案 0 :(得分:22)

您可以使用call_user_func_array()来实现这一目标:

call_user_func_array("range", $args);使用您的示例。

答案 1 :(得分:16)

php5.6中添加了... operator。使用它,您可以摆脱call_user_func_array()这个更简单的替代方案。例如,有一个功能

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

和你的数组$list = [4, 6];(在php5.5之后,你可以用这种方式声明数组)。 您可以使用...调用您的函数:

echo add(...$list);

答案 2 :(得分:4)

您应该使用call_user_func_array

call_user_func_array(array(CLASS, METHOD), array(arg1, arg2, ....))

http://www.php.net/call_user_func_array

或使用反射api http://www.php.net/oop5.reflection

答案 3 :(得分:3)

在某些情况下,您可能会考虑使用unpacking,这在php中是可能的,与python类似:

list($min, $max) = [3, 6];
range($min, $max);

这就是我至少得出这个答案的方式。 Google搜索:PHP argument unpacking

答案 4 :(得分:0)

<?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