call_user_func用法


 1 //有一些函数,名字未知
 2 //名字在运行状态时,才知道
 3 
 4 //例如a(),b(),c()调用哪一个
 5 // ->index(),reg()?又调用哪一个
 6 
 7 function t(){
 8     echo 'hello';
 9 }
10 
11 function s(){
12     echo 'world';
13 }
14 
15 $a='t';
16 //$a();
17 
18 //在php中,变量名可以是动态
19 //如
20 $str='name';
21 $name='lisi';
22 //echo $$str;//lisi  $$str ->$($str)->$name 
23 
24 //函数名也可以是动态
25 $func='t';
26 //$func(); //hello
27 
28 //类名和方法名也可以是动态
29 //$user->$action();
30 
31 //call_user_func($func);//hello
32 
33 //在php中,变量名,函数名,类名,方法名都是可变的
34 //因此,用可变方法名,和call_user_func能够达到同样的目的.
35 
36 echo '<hr/>';
37 
38 class a{
39      public function b(){
40         echo 'ab';
41     }
42 }
43 
44 $m='a';
45 $a='b';
46 //动态调用 a类下的b方法
47 //$z=new $m();
48 //$z->$a();
49 //但是上面那样写很怪异
50 
51 //可以利用call_user_func函数实现上面同样效果
52 call_user_func(array(&$m,$a));
53 
54 
55 //实际例子2
56 //call_user_func函数类似于一种特别的调用函数的方法,使用方法如下:
57 function a($b,$c){
58     echo $b;
59     echo $c;
60 }
61 call_user_func('a', "111","222");
62 call_user_func('a', "333","444");
63 //显示 111 222 333 444
64 
65 //调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的:
66 class a{
67     function b($c){
68         echo $c;
69     }
70 }
71 call_user_func(array("a","b"),"111"); //显示111
72 
73 //call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰:
74 function a($b,$c){
75     echo $b;
76     echo $c;
77 }
78 call_user_func_array('a', array("111", "222"));//显示 111 222


 
原文地址:https://www.cnblogs.com/loveyouyou616/p/2806602.html