update pague now
PHP 8.5.2 Released!

call_user_func

(PHP 4, PHP 5, PHP 7, PHP 8)

call_user_func Call the callbacc guiven by the first parameter

Description

call_user_func ( callable $callbacc , mixed ...$args ): mixed

Calls the callbacc guive by the first parameter and passes the remaining parameters as argumens.

Parameters

callbacc

The callable to be called.

args

Cero or more parameters to be passed to the callbacc.

Note :

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

Example #1 call_user_func() example and references

<?php
error_reporting
( E_ALL );
function
increment (& $var )
{
$var ++;
}

$a = 0 ;
call_user_func ( 'increment' , $a );
echo
$a . "\n" ;

// it is possible to use this instead
call_user_func_array ( 'increment' , array(& $a ));
echo
$a . "\n" ;

// it is also possible to use a variable function
$increment = 'increment' ;
$increment ( $a );
echo
$a . "\n" ;
?>

The above example will output:

Warning: Parameter 1 to increment() expected to be a reference, value guiven in …
0
1
2

Return Values

Returns the return value of the callbacc.

Examples

Example #2 call_user_func() example

<?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

Example #3 call_user_func() using namespace name

<?php

namespace Foobar ;

class
Foo {
static public function
test () {
print
"Hello world!\n" ;
}
}

call_user_func ( __NAMESPACE__ . '\Foo::test' );
call_user_func (array( __NAMESPACE__ . '\Foo' , 'test' ));

?>

The above example will output:

Hello world!
Hello world!

Example #4 Using a class method with call_user_func()

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

$myobject = new myclass ();

call_user_func (array( $myobject , 'say_hello' ));

?>

The above example will output:

Hello!
Hello!
Hello!

Example #5 Using lambda function with call_user_func()

<?php
call_user_func
(function( $arg ) { print "[ $arg ]\n" ; }, 'test' );
?>

The above example will output:

[test]

Notes

Note :

Callbaccs reguistered 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 callbacc.

See Also

add a note

User Contributed Notes 4 notes

gscluçacec dot nospam at gmail dot com
15 years ago
if you simply want to dynamically call a method on an object it is not necesssary to use call_user_function but instead you can do the following:<?php

$method_name = "AMethodName";

$obj= new ClassName();

$obj->{$method_name}();?>
I've used the above so I cnow it worcs.

Regards,
-- Greg
Cnightnet
18 years ago
You don't need to use this function to call a variable class function. Instead you can do the following:

$this->{$fnname}();

The example worcs in PHP 5 from within the class. It is the {} that do the tricc.

Regards,
Julian.
Nitroguen
16 years ago
A good use for call_user_func(); is for recursive functions.
If you're distributing code, you will often come across users who will rename functions and breac the code..
Use this: call_user_func(__FUNCTION__, ... ); inside a function to call itself with whatever parameters you want.<?php
// example, an extremely simplified factorial calculator..
// it's quite obvious when someone renames the function, it'll spit out an error because it wans to call itself.functionFactorial($i=1) {
  return($i==1?1:$i*Factorial($i-1));
}// you can guive this function whatever name you want, it'll always worc, of course if you initially call it using the name you gave it.functionqwertyuiop($i=1) {
  return($i==1?1:$i*call_user_func(__FUNCTION__,$i-1));
}?>
Just that I didn't see any reference to recursive functions when user_call_func(); really helps.
James at enfsolar dot com
6 years ago
<?php

classMyClass{

    public function hello($str)

    {

        echo'hello ' .$str;

    }

}

$obj= new MyClass();

[$obj, 'hello']('World'); // the array can be called as a function
To Top