(PHP 4, PHP 5, PHP 7, PHP 8)
call_user_func — Call the callback given by the first parameter
Calls the callback
given by the first parameter and passes
the remaining parameters as arguments.
callback
The callable to be called.
args
Zero or more parameters to be passed to the callback.
Зауваження:
Note that the parameters for call_user_func() are not passed by reference.
Приклад #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";
?>Поданий вище приклад виведе:
Warning: Parameter 1 to increment() expected to be a reference, value given in … 0 1 2
Returns the return value of the callback.
Приклад #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");
?>
Поданий вище приклад виведе:
You wanted a mushroom haircut, no problem You wanted a shave haircut, no problem
Приклад #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'));
?>
Поданий вище приклад виведе:
Hello world! Hello world!
Приклад #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'));
?>
Поданий вище приклад виведе:
Hello! Hello! Hello!
Приклад #5 Using lambda function with call_user_func()
<?php
call_user_func(function($arg) { print "[$arg]\n"; }, 'test');
?>
Поданий вище приклад виведе:
[test]
Зауваження:
Зворотні виклики, зареєстровані через функції call_user_func() і call_user_func_array(), не будуть викликатись при наявності неспійманих винятків, викинутих в попередніх зворотніх викликах.