Question

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?

Was it helpful?

Solution

You can use call_user_func_array() to achieve that:

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

OTHER TIPS

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);

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

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top