Como foi mencionado , no PHP 5.6+ você pode (deveria!) Usar o ...
token (também conhecido como "operador de splat", parte da funcionalidade das funções variadas) para chamar facilmente uma função com uma matriz de argumentos:
<?php
function variadic($arg1, $arg2)
{
// Do stuff
echo $arg1.' '.$arg2;
}
$array = ['Hello', 'World'];
// 'Splat' the $array in the function call
variadic(...$array);
// 'Hello World'
Nota: os itens da matriz são mapeados para argumentos por sua posição na matriz, não por suas chaves.
De acordo com o comentário de CarlosCarucce , essa forma de descompactar argumentos é de longe o método mais rápido em todos os casos. Em algumas comparações, é mais de 5x mais rápido que call_user_func_array
.
a parte, de lado
Porque acho que isso é realmente útil (embora não esteja diretamente relacionado à pergunta): você pode digitar o parâmetro do operador splat na definição de sua função para garantir que todos os valores passados correspondam a um tipo específico.
(Lembre-se de que, fazendo isso, DEVE ser o último parâmetro definido e que agrupa todos os parâmetros passados para a função na matriz.)
Isso é ótimo para garantir que uma matriz contenha itens de um tipo específico:
<?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);