关于call_user_func()函数的相关使用

转载:www.smsyun.com/home-index-page-id-176.html



UCenter源代码里有一个函数call_user_func,开始以为是自己定义的函数,结果到处都找不到。后来才知道call_user_func是PHP的内置函数,该函数允许用户调用直接写的函数并传入一定的参数,下面总结下这个函数的使用方法。

call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:

01

02functionnowamagic($a,$b)

03{

04echo$a;

05echo$b;

06}

07call_user_func('nowamagic',"111","222");

08call_user_func('nowamagic',"333","444");

09//显示 111 222 333 444

10?>

调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也挺有新意的:

01

02classa {

03functionb($c)

04{

05echo$c;

06}

07}

08call_user_func(array("a","b"),"111");

09//显示 111

10?>

call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:

1

2functiona($b,$c)

3{

4echo$b;

5echo$c;

6}

7call_user_func_array('a',array("111","222"));

8//显示 111 222

9?>

call_user_func_array函数也可以调用类内部的方法的:

01

02Class ClassA

03{

04

05functionbc($b,$c) {

06$bc=$b+$c;

07echo$bc;

08}

09}

10call_user_func_array(array('ClassA','bc'),array("111","222"));

11

12//显示 333

13?>

call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致:

01

02functiona($b)

03{

04$b++;

05}

06$c= 0;

07call_user_func('a',$c);

08echo$c;//显示 1

09call_user_func_array('a',array($c));

10echo$c;//显示 2

11?>

另外,call_user_func函数和call_user_func_array函数都支持引用。

查看代码

打印?

01

02functionincrement(&$var)

03{

04$var++;

05}

06$a= 0;

07call_user_func('increment',$a);

08echo$a;// 0

09call_user_func_array('increment',array(&$a));// You can use this instead

10echo$a;// 1

11?>

你可能感兴趣的:(关于call_user_func()函数的相关使用)