There's a lot PHP 7 love going around these days, but PHP 5.6 has it's fair share of nice features too. One of those features is the splat operator. It looks like this: ... .

The splat operator can capture a variable number of arguments.

function logThis (...$messages) { foreach ($messages as $message) { echo $message.PHP_EOL; } } logThis( 'one' , 'two' , 'three' );

You can still use regular arguments as well:

function logThis ($firstMessage, ...$otherMessages) { echo "superimportant: {$firstMessage}" .PHP_EOL; foreach ($otherMessages as $message) { echo $message.PHP_EOL; } } logThis( 'one' , 'two' , 'three' );

Another usage for the splat operator is argument unpacking:

$messages[] = "one" ; $messages[] = "two" ; $messages[] = "three" ; logThis(...$messages);

The operator can also help replacing usages of call_user_func_array to something more readable. Consider this contrived example where all calls to a class are forwarded to a dependency.

class ClassA { protected $classB; public function __construct (ClassB $classB) { $this ->classB = $classB; } public function __call ($method, $args) { call_user_func_array([ $this ->classB, $method], $args); } }

Using this splat operator this can be rewritten to:

class ClassA { protected $classB; public function __construct (ClassB $classB) { $this ->classB = $classB; } public function __call ($method, $args) { $this ->classB->$method(...$args); } }

Do you know some other cool usage of the operator? Let me know in the comments below.