Il y a DEUX utilisations pour le jeton PHP des points de suspension (...) - pensez-y comme emballer un tableau et décompresser un tableau. Les deux objectifs s'appliquent aux arguments de fonction.
Pack
Lors de la définition d'une fonction, si vous avez besoin d'un nombre dynamique de variables fournies à la fonction (c'est-à-dire que vous ne savez pas combien d'arguments seront fournis à cette fonction lorsqu'elle est appelée dans le code), utilisez le jeton points de suspension (...) pour capture tous les arguments restants fournis à cette fonction dans un tableau accessible à l'intérieur du bloc fonction. Le nombre d'arguments dynamiques capturés par les points de suspension (...) peut être égal ou supérieur à zéro.
Par exemple :
// 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
Lorsque l'empaquetage est utilisé dans l'instanciation de fonction, les points de suspension (...) capturent tous les arguments restants , c'est-à-dire que vous pouvez toujours avoir n'importe quel nombre d'arguments initiaux fixes (positionnels):
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
Déballer
Alternativement, lors de l'appel d'une fonction, si les arguments que vous fournissez à cette fonction sont précédemment combinés dans un tableau, utilisez le jeton points de suspension (...) pour convertir ce tableau en arguments individuels fournis à la fonction - chaque élément du tableau est assigné à l'élément respectif variable d'argument de fonction nommée dans la définition de fonction.
Par exemple:
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
Le déballage est particulièrement utile lorsque vous utilisez des fonctions de tableau pour manipuler des tableaux ou des variables.
Par exemple, décompression du résultat de 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