Có HAI cách sử dụng đối với dấu chấm lửng (...) mã thông báo PHP — hãy nghĩ chúng như đóng gói một mảng và giải nén một mảng. Cả hai mục đích đều áp dụng cho các đối số của hàm.
Đóng gói
Khi xác định một hàm, nếu bạn cần một số biến động được cung cấp cho hàm (tức là bạn không biết có bao nhiêu đối số sẽ được cung cấp cho hàm đó khi được gọi trong mã), hãy sử dụng dấu chấm lửng (...) để nắm bắt tất cả các đối số còn lại được cung cấp cho hàm đó vào một mảng có thể truy cập được bên trong khối hàm. Số lượng đối số động được thu thập bởi dấu chấm lửng (...) có thể bằng 0 hoặc nhiều hơn.
Ví dụ :
// 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
Khi đóng gói được sử dụng trong khởi tạo hàm, dấu chấm lửng (...) nắm bắt tất cả các đối số còn lại , tức là bạn vẫn có thể có bất kỳ số lượng đối số ban đầu, cố định (vị trí) nào:
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
Giải nén
Ngoài ra, khi gọi một hàm, nếu các đối số bạn cung cấp cho hàm đó trước đó được kết hợp thành một mảng, hãy sử dụng dấu chấm lửng (...) để chuyển đổi mảng đó thành các đối số riêng lẻ được cung cấp cho hàm — mỗi phần tử mảng được gán cho các biến đối số hàm có tên trong định nghĩa hàm.
Ví dụ:
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
Việc giải nén đặc biệt hữu ích khi sử dụng các hàm mảng để thao tác với mảng hoặc biến.
Ví dụ: giải nén kết quả của 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