Как уже упоминалось , начиная с PHP 5.6+ вы можете (должны!) Использовать токен ...
(он же «оператор сплат»), часть функций variadic ) легко вызвать функцию с массивом аргументов:
<?php
function variadic($arg1, $arg2)
{
// Do stuff
echo $arg1.' '.$arg2;
}
$array = ['Hello', 'World'];
// 'Splat' the $array in the function call
variadic(...$array);
// 'Hello World'
Примечание: элементы массива сопоставляются с аргументами по их позиции в массиве, а не по их ключам.
Согласно комментарию КарлосКарукче , эта форма распаковки аргументов является самым быстрым методом во всех случаях. В некоторых сравнениях это более чем в 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);