Passing an Array as Arguments, not an Array, in PHP Passing an Array as Arguments, not an Array, in PHP arrays arrays

Passing an Array as Arguments, not an Array, in PHP


As has been mentioned, as of PHP 5.6+ you can (should!) use the ... token (aka "splat operator", part of the variadic functions functionality) to easily call a function with an array of arguments:

<?phpfunction variadic($arg1, $arg2){    // Do stuff    echo $arg1.' '.$arg2;}$array = ['Hello', 'World'];// 'Splat' the $array in the function callvariadic(...$array);// 'Hello World'

Note: array items are mapped to arguments by their position in the array, not their keys.

As per CarlosCarucce's comment, this form of argument unpacking is the fastest method by far in all cases. In some comparisons, it's over 5x faster than call_user_func_array.

Aside

Because I think this is really useful (though not directly related to the question): you can type-hint the splat operator parameter in your function definition to make sure all of the passed values match a specific type.

(Just remember that doing this it MUST be the last parameter you define and that it bundles all parameters passed to the function into the array.)

This is great for making sure an array contains items of a specific type:

<?php// Define the function...function variadic($var, SomeClass ...$items){    // $items will be an array of objects of type `SomeClass`}// Then you can call...variadic('Hello', new SomeClass, new SomeClass);// or even splat both ways$items = [    new SomeClass,    new SomeClass,];variadic('Hello', ...$items);


Also note that if you want to apply an instance method to an array, you need to pass the function as:

call_user_func_array(array($instance, "MethodName"), $myArgs);