call_user_func_array
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
call_user_func_array — Chama uma função de retorno com um array de parâmetros
Descrição
Chama a função de retorno do definida no primeiro parâmetro callback
com
os parâmetros informados no parâmetro args
.
Parâmetros
callback
-
A função do tipo callable a ser chamada.
args
-
Os parâmetros a serem passados à função de retorno, como um array.
Se as chaves do array de
args
forem todas numéricas, elas serão ignoradas e cada elemento será passado à função informada no parâmetrocallback
como um argumento potencial, em ordem.Se qualquer chave do array
args
for uma string, esses elementos serão passados à função informada no parâmetrocallback
como argumentos nomeados, com o mesmo nome dado pela chave.É um erro fatal quando uma chave numérica no array do parâmetro
args
aparece depois de uma chave string, ou se uma chave string não corresponder a nenhum parâmetro da função informada emcallback
.
Valor Retornado
Retorna o mesmo valor retornado pela função de retorno, ou false
em caso de erro.
Registro de Alterações
Versão | Descrição |
---|---|
8.0.0 |
As chaves de args agora serão interpretadas como nomes de parâmetros, ao invés de serem silenciosamente ignorados.
|
Exemplos
Example #1 Exemplo de call_user_func_array()
<?php
function foobar($arg, $arg2) {
echo __FUNCTION__, " recebeu $arg e $arg2\n";
}
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " recebeu $arg e $arg2\n";
}
}
// Chama a função foobar() com 2 argumentos
call_user_func_array("foobar", array("um", "dois"));
// Chama o método $foo->bar() com 2 argumentos
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("três", "quatro"));
?>
O exemplo acima produzirá algo semelhante a:
foobar recebeu um e dois foo::bar recebeu três e quatro
Example #2 call_user_func_array() usando espaço de nomes
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print "Olá, {$name}!\n";
}
}
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('João'));
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Felipe'));
?>
O exemplo acima produzirá algo semelhante a:
Olá, João! Olá, Felipe!
Example #3 Usando função lambda
<?php
$func = function($arg1, $arg2) {
return $arg1 * $arg2;
};
var_dump(call_user_func_array($func, array(2, 4)));
?>
O exemplo acima produzirá:
int(8)
Example #4 Passando valores por referência
<?php
function mega(&$a){
$a = 55;
echo "função mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo "global \$bar=$bar\n";
?>
O exemplo acima produzirá:
função mega $a=55 global $bar=55
Example #5 call_user_func_array() usando parâmetros nomeados
<?php
function foobar($primeiro, $segundo) {
echo __FUNCTION__, " recebeu $primeiro e $segundo\n";
}
// Chama a função foobar() com argumentos nomeados em ordem não posicional
call_user_func_array("foobar", array("segundo" => "dois", "primeiro" => "um"));
// Chama a função foobar() com um argumento nomeado
call_user_func_array("foobar", array("foo", "segundo" => "bar"));
// Erro fatal: Não é possível usar argumento posicional após um argumento nomeado
call_user_func_array("foobar", array("primeiro" => "um", "bar"));
?>
O exemplo acima produzirá algo semelhante a:
foobar recebeu um and dois foobar recebeu foo and bar Fatal error: Uncaught Error: Cannot use positional argument after named argument
Notas
Note:
Callbacks registrados com funções como call_user_func() e call_user_func_array() não serão chamados se houver uma exceção não capturada que foi lançada em um callback anterior.
Veja Também
- call_user_func() - Chama a função de retorno informada no primeiro parâmetro
- ReflectionFunction::invokeArgs() - Invoca argumentos de função
- ReflectionMethod::invokeArgs() - Invoca argumentos