您的位置:首页技术文章
文章详情页

PHP基础之函数7——动态调用函数

【字号: 日期:2022-09-14 17:09:29浏览:3作者:猪猪
call_user_func

(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)

标签: PHP
相关文章: