轉(zhuǎn)載:www.smsyun.com/home-index-page-id-176.html
UCenter源代碼里有一個函數(shù)call_user_func别威,開始以為是自己定義的函數(shù)饶米,結(jié)果到處都找不到肥矢。后來才知道call_user_func是PHP的內(nèi)置函數(shù),該函數(shù)允許用戶調(diào)用直接寫的函數(shù)并傳入一定的參數(shù)炊苫,下面總結(jié)下這個函數(shù)的使用方法四康。
call_user_func函數(shù)類似于一種特別的調(diào)用函數(shù)的方法枫匾,使用方法如下:
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?>
調(diào)用類內(nèi)部的方法比較奇怪,居然用的是array堵幽,不知道開發(fā)者是如何考慮的狗超,當(dāng)然省去了new,也挺有新意的:
01
02classa {
03functionb($c)
04{
05echo$c;
06}
07}
08call_user_func(array("a","b"),"111");
09//顯示 111
10?>
call_user_func_array函數(shù)和call_user_func很相似朴下,只不過是換了一種方式傳遞了參數(shù)努咐,讓參數(shù)的結(jié)構(gòu)更清晰:
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函數(shù)也可以調(diào)用類內(nèi)部的方法的:
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函數(shù)和call_user_func_array函數(shù)都支持引用,這讓他們和普通的函數(shù)調(diào)用更趨于功能一致:
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函數(shù)和call_user_func_array函數(shù)都支持引用渗稍。
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?>