Как уже упоминалось , начиная с PHP 5.6+ вы можете (должны!) Использовать ...
токен (он же «оператор сплат », часть функциональности функций с переменными числами ), чтобы легко вызывать функцию с массивом аргументов:
<?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);