Як уже згадувалося , з PHP 5.6+ ви можете (повинні!) Використовувати ...
маркер (він же "оператор splat", частина функцій різноманітних функцій), щоб легко викликати функцію з масивом аргументів:
<?php
function variadic($arg1, $arg2)
{
// Do stuff
echo $arg1.' '.$arg2;
}
$array = ['Hello', 'World'];
// 'Splat' the $array in the function call
variadic(...$array);
// 'Hello World'
Примітка: елементи масиву відображаються в аргументах за їхньою позицією в масиві, а не за їх ключами.
Відповідно до коментаря CarlosCarucce , ця форма розпакування аргументів є найшвидшим методом на сьогоднішній день у всіх випадках. У деяких порівняннях це в 5 разів швидше, ніж call_user_func_array
.
Убік
Тому що я думаю, що це дійсно корисно (хоча безпосередньо не пов’язано з питанням): ви можете ввести натяк на параметр оператора splat у визначенні своєї функції, щоб переконатися, що всі передані значення відповідають конкретному типу.
(Пам'ятайте лише, що для цього це ОБОВ'ЯЗКОВО бути останнім параметром, який ви визначаєте, і що він зв'язує всі параметри, передані функції в масив.)
Це чудово, щоб переконатися, що масив містить елементи певного типу:
<?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);