Python提供了“*”运算符,用于解压缩元组列表并将它们作为参数提供给函数,如下所示:
args = [3, 6]
range(*args) # call with arguments unpacked from a list
这相当于:
range(3, 6)
有谁知道在PHP中是否有办法实现这一目标?一些谷歌搜索“PHP解包”的变化并没有立即发现任何东西..也许它在PHP中被称为不同的东西?
答案 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