(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
call_user_func_array — Llama a una función de retorno con los argumentos agrupados en un array
Llama a la función de retorno callback
proporcionada con los argumentos args
,
agrupados en un array.
callback
La función de retorno a llamar.
args
Los argumentos a pasar a la función de retorno, en forma de array.
Si las claves de args
son todas numéricas,
las claves son ignoradas y cada elemento será transmitido a
callback
como argumento posicional, en el orden.
Si algunas claves de args
son strings,
estos elementos serán transmitidos a callback
como argumentos nombrados, con el nombre dado por la clave.
No es permitido tener una clave numérica en args
que aparezca después de una clave de string, o tener una clave de string
que no corresponda al nombre de algún parámetro de callback
Retorna el valor retornado por la función
de retorno, o false
si ocurre un error.
Versión | Descripción |
---|---|
8.0.0 |
Las claves args serán interpretadas como nombres de parámetros,
en lugar de ser ignoradas silenciosamente.
|
Ejemplo #1 Ejemplo con call_user_func_array()
<?php
function foobar($arg, $arg2) {
echo __FUNCTION__, " recibió $arg y $arg2\n";
}
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " recibió $arg y $arg2\n";
}
}
// Llamar a la función foobar() con 2 argumentos
call_user_func_array("foobar", array("one", "two"));
// Llamar al método $foo->bar() con 2 argumentos
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>
El resultado del ejemplo sería algo similar a:
foobar recibió one y two foo::bar recibió three y four
Ejemplo #2 Ejemplo con call_user_func_array() utilizando un espacio de nombres
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print "¡Hola {$name}!\n";
}
}
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));
?>
El resultado del ejemplo sería:
¡Hola Hannes! ¡Hola Philip!
Ejemplo #3 Uso de una función lambda
<?php
$func = function($arg1, $arg2) {
return $arg1 * $arg2;
};
var_dump(call_user_func_array($func, array(2, 4)));
?>
El resultado del ejemplo sería:
int(8)
Ejemplo #4 Pasando un valor por referencia
<?php
function mega(&$a){
$a = 55;
echo "function mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo "global \$bar=$bar\n";
?>
El resultado del ejemplo sería:
function mega $a=55 global $bar=55
Ejemplo #5 call_user_func_array() utilizando argumentos nombrados
<?php
function foobar($first, $second) {
echo __FUNCTION__, " recibió $first y $second\n";
}
// Llamar a la función foobar() con argumentos nombrados en orden no posicional
call_user_func_array("foobar", array("second" => "two", "first" => "one"));
// Llamar a la función foobar() con un argumento nombrado
call_user_func_array("foobar", array("foo", "second" => "bar"));
// Error fatal: No se puede usar un argumento posicional después de un argumento nombrado
call_user_func_array("foobar", array("first" => "one", "bar"));
?>
El resultado del ejemplo sería algo similar a:
foobar recibió one y two foobar recibió foo y bar Fatal error: Uncaught Error: Cannot use positional argument after named argument
Nota:
Las funciones de retorno de llamada que se registran con funciones como call_user_func() y call_user_func_array() no se llamarán si se produce una excepción en la función de retorno previa.