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

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

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

Notas

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.

Ver también

add a note

User Contributed Notes 1 note

up
40
sebastian dot rapetti at tim dot it
4 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);
?>
To Top