unpacking an array of arguments in php

2019-03-14 17:09发布

Python provides the "*" operator for unpacking a list of tuples and giving them to a function as arguments, like so:

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

This is equivalent to:

range(3, 6)

Does anyone know if there is a way to achieve this in PHP? Some googling for variations of "PHP Unpack" hasn't immediately turned up anything.. perhaps it's called something different in PHP?

4条回答
放荡不羁爱自由
2楼-- · 2019-03-14 17:33

You can use call_user_func_array() to achieve that:

call_user_func_array("range", $args); to use your example.

查看更多
一夜七次
3楼-- · 2019-03-14 17:46

You should use the call_user_func_array

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

http://www.php.net/call_user_func_array

or use the reflection api http://www.php.net/oop5.reflection

查看更多
劳资没心,怎么记你
4楼-- · 2019-03-14 17:50

In php5.6 the ... operator has been added. Using it, you can get rid of call_user_func_array() for this simpler alternative. For example having a function

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

and your array $list = [4, 6]; (after php5.5 you can declare arrays in this way). You can call your function with ...:

echo add(...$list);

查看更多
来,给爷笑一个
5楼-- · 2019-03-14 17:51

In certain scenarios, you might consider using unpacking, which is possible in php, is a similar way to python:

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

This is how I have arrived to this answer at least. Google search: PHP argument unpacking

查看更多
登录 后发表回答