Trong PHP, có thể viết một hàm có khả năng chấp nhận một danh sách các đối số với số lượng phần tử biến đổi. Để khai báo một danh sách đối số biến, tên của đối số được thêm trước bởi ký hiệu "..." (ba dấu chấm). Các giá trị được truyền vào sẽ được thu thập thành một mảng với tên của đối số.
function myfunction(...$arg) { Statement1; Statement2; }
Để gọi một hàm như vậy, hãy đặt bất kỳ số lượng giá trị được phân tách bằng dấu phẩy trong dấu ngoặc đơn.
myfunction(v1, v2, v3, . . . , vn);
Tham số chính thức được khai báo trong hàm là một mảng chứa tất cả các giá trị được truyền vào. Chúng ta có thể sử dụng bất kỳ hàm mảng tích hợp nào phù hợp để thực hiện quá trình này.
Trong ví dụ dưới đây, hàm người dùng định nghĩa myfunction() có khả năng nhận số lượng giá trị biến đổi và tính trung bình của chúng.
<?php function myfunction(...$numbers) { $avg = array_sum($numbers)/count($numbers); return $avg; } $avg = myfunction(5, 12, 9, 23, 8); echo "average = $avg"; ?>
Nó sẽ tạo ra output −
average = 11.4
Hãy thử thay đổi kích thước của mảng đã truyền và chạy lại chương trình.
Bạn có thể sử dụng một vòng lặp foreach để duyệt qua mảng bên trong hàm. Hàm có thể có bất kỳ đối số vị trí nào trước đối số có độ dài biến. Từ các giá trị nhận được, các đối số vị trí sẽ được điền trước, để lại các đối số khác được sao chép vào mảng.
<?php function myfunction($x, ...$numbers) { echo "First number: $x" . PHP_EOL; echo "Remaining numbers: "; foreach ($numbers as $n) { echo "$n "; } } myfunction(5, 12, 9, 23, 8, 41); ?>
Nó sẽ tạo ra output −
First number: 5 Remaining numbers: 12 9 23 8 41
Có thể xử lý một số lượng biến số đối số cho một hàm, ngay cả khi không có cú pháp "...". PHP có các hàm tích hợp sẵn như func_num_args(), func_get_arg() và func_get_args(), có thể được sử dụng với kết quả tương tự.
func_num_args() − Trả về số lượng đối số được truyền vào hàm.
func_get_arg() − Trả về một mục từ danh sách đối số.
func_get_args() − Trả về một mảng bao gồm danh sách đối số của hàm.
Ví dụ trên về tham số biến có thể được viết lại với các hàm như sau −
<?php function myfunction() { $sum = 0; foreach (func_get_args() as $n) { $sum += $n; } return $sum; } echo myfunction(5, 12, 9, 23, 8, 41); ?>
Nó sẽ tạo ra output −
98
Chương trình này in ra tất cả các số được truyền vào hàm.
<?php function myfunction() { $len = func_num_args(); echo "Numbers : "; $i=0; for ($i=0; $i<$len; $i++) echo func_get_arg($i) . " "; } myfunction(5, 12, 9, 23, 8, 41); ?>
Nó sẽ tạo ra output −
Numbers : 5 12 9 23 8 41