33

Python 提供了 "*" 运算符来解包元组列表并将它们作为参数提供给函数,如下所示:

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

这相当于:

range(3, 6)

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

4

5 回答 5

36

在参数中添加了通过(splat 运算符)php5.6 解包...。使用它,您可以摆脱call_user_func_array()这种更简单的替代方案。例如有一个功能:

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

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

您可以使用以下命令调用您的函数...

echo add(...$list);
于 2014-04-19T00:14:26.537 回答
22

您可以使用它call_user_func_array()来实现:

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

于 2008-11-16T20:08:30.617 回答
6

在某些情况下,您可能会考虑使用unpackingphp 中的 php 类似于 python 的方式:

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

至少我是这样得出这个答案的。谷歌搜索:PHP argument unpacking

于 2015-09-04T15:22:57.007 回答
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

于 2008-11-16T20:15:01.010 回答
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

于 2019-10-08T12:52:45.327 回答