(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
call_user_func_array —Call a callback with an array of parameters
Calls thecallback
given by the first parameter with the parameters inargs
.
callback
Thecallable to be called.
args
The parameters to be passed to the callback, as an array.
If the keys ofargs
are all numeric, the keys are ignored and each element will be passed tocallback
as a positional argument, in order.
If any keys ofargs
are strings, those elements will be passed tocallback
as named arguments, with the name given by the key.
It is a fatal error to have a numeric key inargs
appear after a string key, or to have a string key that does not match the name of any parameter ofcallback
.
Returns the return value of the callback, orfalse
on error.
Version | Description |
---|---|
8.0.0 | args keys will now be interpreted as parameter names, instead of being silently ignored. |
Example #1call_user_func_array() example
<?php
functionfoobar($arg,$arg2) {
echo__FUNCTION__," got$arg and$arg2\n";
}
classfoo{
functionbar($arg,$arg2) {
echo__METHOD__," got$arg and$arg2\n";
}
}
// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one","two"));
// Call the $foo->bar() method with 2 arguments
$foo= newfoo;
call_user_func_array(array($foo,"bar"), array("three","four"));
?>
The above example will outputsomething similar to:
foobar got one and twofoo::bar got three and four
Example #2call_user_func_array() using namespace name
<?php
namespaceFoobar;
classFoo{
static public functiontest($name) {
print"Hello{$name}!\n";
}
}
call_user_func_array(__NAMESPACE__.'\Foo::test', array('Hannes'));
call_user_func_array(array(__NAMESPACE__.'\Foo','test'), array('Philip'));
?>
The above example will outputsomething similar to:
Hello Hannes!Hello Philip!
Example #3 Using lambda function
<?php
$func= function($arg1,$arg2) {
return$arg1*$arg2;
};
var_dump(call_user_func_array($func, array(2,4)));
?>
The above example will output:
int(8)
Example #4 Passing values by reference
<?php
functionmega(&$a){
$a=55;
echo"function mega \$a=$a\n";
}
$bar=77;
call_user_func_array('mega',array(&$bar));
echo"global \$bar=$bar\n";
?>
The above example will output:
function mega $a=55global $bar=55
Example #5call_user_func_array() using named arguments
<?php
functionfoobar($first,$second) {
echo__FUNCTION__," got$first and$second\n";
}
// Call the foobar() function with named arguments in non-positional order
call_user_func_array("foobar", array("second"=>"two","first"=>"one"));
// Call the foobar() function with one named argument
call_user_func_array("foobar", array("foo","second"=>"bar"));
// Fatal error: Cannot use positional argument after named argument
call_user_func_array("foobar", array("first"=>"one","bar"));
?>
The above example will outputsomething similar to:
foobar got one and twofoobar got foo and barFatal error: Uncaught Error: Cannot use positional argument after named argument
Note:
Callbacks registeredwith functions such ascall_user_func() andcall_user_func_array() will not becalled if there is an uncaught exception thrown in a previous callback.
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
functiontest(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);
?>