call_user_func

(PHP 4, PHP 5, PHP 7)
Call the callback given by the first parameter
mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

Calls the callback given by the first parameter and passes the remaining parameters as arguments.

Parameters:
callback

The callable to be called.

parameter

Zero or more parameters to be passed to the callback.

Note:

Note that the parameters for call_user_func() are not passed by reference.

Example #1 call_user_func() example and references

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(E_ALL);
function increment(&$var)
{
    $var++;
}
 
$a = 0;
call_user_func('increment'$a);
echo $a."\n";
 
// You can use this instead
call_user_func_array('increment'array(&$a));
echo $a."\n";
?>

The above example will output:

0
1
Returns:

Returns the return value of the callback, or FALSE on error.

Changelog:
5.3.0

The interpretation of object oriented keywords like parent and self has changed. Previously, calling them using the double colon syntax would emit an E_STRICT warning because they were interpreted as static.

Notes:

Callbacks registered with functions such as call_user_func() and call_user_func_array() will not be called if there is an uncaught exception thrown in a previous callback.

Examples:
call_user_func() example and references

Note that the parameters for call_user_func() are not passed by reference.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting(E_ALL);
function increment(&$var)
{
    $var++;
}
 
$a = 0;
call_user_func('increment'$a);
echo $a."\n";
 
// You can use this instead
call_user_func_array('increment'array(&$a));
echo $a."\n";
?>

The above example will output:

0
1
call_user_func() example
1
2
3
4
5
6
7
8
<?php
function barber($type)
{
    echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber'"mushroom");
call_user_func('barber'"shave");
?>

The above example will output:

You wanted a mushroom haircut, no problem
You wanted a shave haircut, no problem
call_user_func() using namespace name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
namespace Foobar;
 
class Foo {
    static public function test() {
        print "Hello world!\n";
    }
}
 
call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0
call_user_func(array(__NAMESPACE__ .'\Foo''test')); // As of PHP 5.3.0
 
?>

The above example will output:

Hello world!
Hello world!
Using a class method with call_user_func()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
class myclass {
    static function say_hello()
    {
        echo "Hello!\n";
    }
}
 
$classname "myclass";
 
call_user_func(array($classname'say_hello'));
call_user_func($classname .'::say_hello'); // As of 5.2.3
 
$myobject new myclass();
 
call_user_func(array($myobject'say_hello'));
 
?>

The above example will output:

Hello!
Hello!
Hello!
Using lambda function with call_user_func()
1
2
3
<?php
call_user_func(function($arg) { print "[$arg]\n"; }, 'test'); /* As of PHP 5.3.0 */
?>

The above example will output:

[test]
See also:

call_user_func_array() -

is_callable() -

callback -

ReflectionFunction::invoke() -

ReflectionMethod::invoke() -

doc_php
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.