PHP基础之函数7——动态调用函数
(PHP 4, PHP 5)
call_user_func — 传入一个参数来调用回调函数
说明mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )Calls the callback given by the first parameter and passes the remaining parameters as arguments.
参数callbackThe callable to be called.parameterZero 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
<?phperror_reporting(E_ALL);function increment(&$var){ $var++;}$a = 0;call_user_func(’increment’, $a);echo $a.'n';call_user_func_array(’increment’, array(&$a)); // You can use this instead before PHP 5.3echo $a.'n';?>以上例程会输出:
01 返回值
Returns the return value of the callback, or FALSE on error.
范例Example #2 call_user_func() example
<?phpfunction barber($type){ echo 'You wanted a $type haircut, no problemn';}call_user_func(’barber’, 'mushroom');call_user_func(’barber’, 'shave');?>以上例程会输出:
You wanted a mushroom haircut, no problemYou wanted a shave haircut, no problem
Example #3 call_user_func() using namespace name
<?phpnamespace Foobar;class Foo { static public function test() { print 'Hello world!n'; }}call_user_func(__NAMESPACE__ .’Foo::test’); // As of PHP 5.3.0call_user_func(array(__NAMESPACE__ .’Foo’, ’test’)); // As of PHP 5.3.0?>以上例程会输出:
Hello world!Hello world!
Example #4 Using a class method with call_user_func()
<?phpclass 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’));?>以上例程会输出:
Hello!Hello!Hello!
Example #5 Using lambda function with call_user_func()
<?phpcall_user_func(function($arg) { print '[$arg]n'; }, ’test’); /* As of PHP 5.3.0 */?>以上例程会输出:
[test]call_user_func_array
(PHP 4 >= 4.0.4, PHP 5)
call_user_func_array — 传入一个参数数组来调用回调函数
说明mixed call_user_func_array ( callable $callback , array $param_arr )Calls the callback given by the first parameter with the parameters in param_arr.
参数callbackThe callable to be called.param_arrThe parameters to be passed to the callback, as an indexed array.返回值Returns the return value of the callback, or FALSE on error.
范例Example #1 call_user_func_array() example
<?phpfunction foobar($arg, $arg2) { echo __FUNCTION__, ' got $arg and $arg2n';}class foo { function bar($arg, $arg2) { echo __METHOD__, ' got $arg and $arg2n'; }}// Call the foobar() function with 2 argumentscall_user_func_array('foobar', array('one', 'two'));// Call the $foo->bar() method with 2 arguments$foo = new foo;call_user_func_array(array($foo, 'bar'), array('three', 'four'));?>以上例程的输出类似于:
foobar got one and twofoo::bar got three and four
Example #2 call_user_func_array() using namespace name
<?phpnamespace Foobar;class Foo { static public function test($name) { print 'Hello {$name}!n'; }}// As of PHP 5.3.0call_user_func_array(__NAMESPACE__ .’Foo::test’, array(’Hannes’));// As of PHP 5.3.0call_user_func_array(array(__NAMESPACE__ .’Foo’, ’test’), array(’Philip’));?>以上例程的输出类似于:
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))); /* As of PHP 5.3.0 */?>以上例程会输出:
int(8)
相关文章: