Như đã đề cập , kể từ phiên bản PHP 5.6+, bạn có thể (nên!) Sử dụng ...
mã thông báo (còn gọi là "toán tử splat", một phần của chức năng hàm matrixdic ) để dễ dàng gọi một hàm với một mảng các đối số:
<?php
function variadic($arg1, $arg2)
{
// Do stuff
echo $arg1.' '.$arg2;
}
$array = ['Hello', 'World'];
// 'Splat' the $array in the function call
variadic(...$array);
// 'Hello World'
Lưu ý: các mục mảng được ánh xạ tới các đối số theo vị trí của chúng trong mảng, không phải các khóa của chúng.
Theo nhận xét của CarlosCarucce , hình thức giải nén đối số này là phương pháp nhanh nhất cho đến nay trong mọi trường hợp. Trong một số so sánh, nó nhanh hơn 5x call_user_func_array
.
Qua một bên
Bởi vì tôi nghĩ rằng điều này thực sự hữu ích (mặc dù không liên quan trực tiếp đến câu hỏi): bạn có thể gõ gợi ý tham số toán tử splat trong định nghĩa hàm của bạn để đảm bảo tất cả các giá trị được truyền phù hợp với một loại cụ thể.
(Chỉ cần nhớ rằng làm điều này, nó PHẢI là tham số cuối cùng bạn xác định và nó bó tất cả các tham số được truyền cho hàm vào mảng.)
Điều này là tuyệt vời để đảm bảo một mảng chứa các mục thuộc một loại cụ thể:
<?php
// Define the function...
function variadic($var, SomeClass ...$items)
{
// $items will be an array of objects of type `SomeClass`
}
// Then you can call...
variadic('Hello', new SomeClass, new SomeClass);
// or even splat both ways
$items = [
new SomeClass,
new SomeClass,
];
variadic('Hello', ...$items);