PHP 8.6.0 Beta 1 is available for testing

call_user_func_array

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

call_user_func_arrayLlama a una función de retorno con los argumentos agrupados en un array

Descripción

function call_user_func_array(callable $callback, array $args): mixed

Llama a la función de retorno callback proporcionada con los argumentos args, agrupados en un array.

Parámetros

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

Valores devueltos

Retorna el valor retornado por la función de retorno, o false si ocurre un error.

Historial de cambios

Versión Descripción
8.0.0 Las claves args serán interpretadas como nombres de parámetros, en lugar de ser ignoradas silenciosamente.

Ejemplos

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"));
?>

Resultado del ejemplo anterior es 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 ejemplo anterior mostrará:

¡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 ejemplo anterior mostrará:

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 ejemplo anterior mostrará:

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"));
?>

Resultado del ejemplo anterior es similar a:

foobar recibió one y two
foobar recibió foo y bar
Fatal error: Uncaught Error: Cannot use positional argument after named argument

Notas

Nota: Las devoluciónes de llamada registradas con funciones como call_user_func() y call_user_func_array() no serán llamadas si una excepción no es interceptada cuando ha sido lanzada en una función de devolución de llamada anterior.

Véase también

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 1 note

up
41
sebastian dot rapetti at tim dot it
5 years ago
Using PHP 8, call_user_func_array call callback function using named arguments if an array with keys is passed to $args parameter, if the array used has only values, arguments are passed positionally.
<?php
function test(string $param1, string $param2): void
{
 echo $param1.' '.$param2;
}
$args = ['hello', 'world'];
//hello world
call_user_func_array('test', $args);
$args = ['param2' => 'world', 'param1' => 'hello'];
//hello world
call_user_func_array('test', $args);
$args = ['unknown_param' => 'hello', 'param2' => 'world'];
//Fatal error: Uncaught Error: Unknown named parameter $unknown_param
call_user_func_array('test', $args);
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /