syntax - What is the meaning of three dots (...) in PHP?

ID : 20120

viewed : 24

Tags : phpsyntaxoperatorsphp

Top 5 Answer for syntax - What is the meaning of three dots (...) in PHP?

vote vote

98

The ...$str is called a splat operator in PHP.

This feature allows you to capture a variable number of arguments to a function, combined with "normal" arguments passed in if you like. It's easiest to see with an example:

function concatenate($transform, ...$strings) {     $string = '';     foreach($strings as $piece) {         $string .= $piece;     }     return($transform($string)); }  echo concatenate("strtoupper", "I'd ", "like ", 4 + 2, " apples"); // This would print: // I'D LIKE 6 APPLES 

The parameters list in the function declaration has the ... operator in it, and it basically means " ... and everything else should go into $strings". You can pass 2 or more arguments into this function and the second and subsequent ones will be added to the $strings array, ready to be used.

vote vote

82

There are TWO uses for the ellipsis (...) PHP token—think of them as packing an array and unpacking an array. Both purposes apply to function arguments.


Pack

When defining a function, if you need a dynamic number of variables provided to the function (i.e., you don't know how many arguments will be provided to that function when called in your code) use the ellipsis (...) token to capture all remaining arguments provided to that function into an array that is accessible inside the function block. The number of dynamic arguments captured by ellipsis (...) can be zero or more.

For example:

// function definition function sum (...$numbers) { // use ellipsis token when defining function     $acc = 0;     foreach ($numbers as $nn) {         $acc += $nn;     }     return $acc; }  // call the function echo sum(1, 2, 3, 4); // provide any number of arguments  > 10  // and again... echo sum(1, 2, 3, 4, 5);  > 15  // and again... echo sum();  > 0 

When packing is used in function instantiation, ellipsis (...) captures all remaining arguments, i.e., you can still have any number of initial, fixed (positional) arguments:

function sum ($first, $second, ...$remaining_numbers) {     $acc = $first + $second;     foreach ($remaining_numbers as $nn) {         $acc += $nn;     }     return $acc; }  // call the function echo sum(1, 2); // provide at least two arguments  > 3  // and again... echo sum(1, 2, 3, 4); // first two are assigned to fixed arguments, the rest get "packed"  > 10 

Unpack

Alternatively, when calling a function, if the arguments you provide to that function are previously combined into an array use the ellipsis (...) token to convert that array into individual arguments provided to the function—each array element is assigned to the respective function argument variable named in the function definition.

For example:

function add ($aa, $bb, $cc) {     return $aa + $bb + $cc; }  $arr = [1, 2, 3]; echo add(...$arr); // use ellipsis token when calling function  > 6  $first = 1; $arr = [2, 3]; echo add($first, ...$arr); // used with positional arguments  > 6  $first = 1; $arr = [2, 3, 4, 5]; // array can be "oversized" echo add($first, ...$arr); // remaining elements are ignored  > 6 

Unpacking is particularly useful when using array functions to manipulate arrays or variables.

For example, unpacking the result of array_slice:

function echoTwo ($one, $two) {     echo "$one\n$two"; }  $steaks = array('ribeye', 'kc strip', 't-bone', 'sirloin', 'chuck');  // array_slice returns an array, but ellipsis unpacks it into function arguments echoTwo(...array_slice($steaks, -2)); // return last two elements in array  > sirloin > chuck 
vote vote

76

Every answer refers to the same blog post, besides them, here is the official documentation about variable-length argument lists:

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

In PHP 5.6 and later, argument lists may include the ... token to denote that the function accepts a variable number of arguments. The arguments will be passed into the given variable as an array

It seems "splat" operator is not an official name, still it's cute!

vote vote

63

In PHP 7.4 the ellipsis is also the Spread operator:

$parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; // ['banana', 'orange', 'apple', 'pear', 'watermelon']; 

Source: https://wiki.php.net/rfc/spread_operator_for_array

vote vote

50

To use this feature, just warn PHP that it needs to unpack the array into variables using the ... operator. See here for more details, a simple example could look like this:

$email[] = "Hi there"; $email[] = "Thanks for registering, hope you like it";  mail("someone@example.com", ...$email); 

Top 3 video Explaining syntax - What is the meaning of three dots (...) in PHP?

Related QUESTION?