今天偶然的情况下在CodeIgniter的官方文档中再次看到了php中的call_user_func_array()这个函数,去年也在discuz论坛的代码中也有遇到过,但是当时不知道怎么回事,在网上没有找到相应的说明,所以也一直都没弄明白这个函数有什么用处。呵呵~~很幸运的是,今天在网上搜索到了这个函数的用法(PS:虽然php手册中有关于这个函数的介绍,但是看了介绍还是不明白,也不知道是我的理解能力不行还是文档说明的太模糊了,不信你自己去看看:http://cn2.php.net/call_user_func_array)
下面来和大家分享一下这个call_user_func_array和call_user_func函数的用法,另外附赠func_get_args()函数和func_num_args()函数,嘿嘿!!
call_user_func函数是当需要动态调用函数时,才使用的,这个函数有两种用法:
第一种是调用孤独的函数:
1
2
3
4
5
6
7
8
9
10
11
|
<!--?
function
funa(
$b
,
$c
)
{
echo
$b
;
echo
$c
;
}
call_user_func(
'funa'
,
"111"
,
"222"
);
call_user_func(
'funa'
,
"333"
,
"444"
);
//显示 111 222 333 444
//大家有没有发现,这个用法有点像javascript中的call方法,嘿嘿
?-->
|
第二种是调用类内部的函数:
1
2
3
4
5
6
7
8
9
10
11
12
|
<!--?
class
a {
function
b()
{
$args
= func_get_args();
$num
= func_num_args();
print_r(
$args
);
echo
$num
;
}
}
call_user_func(
array
(
"a"
,
"b"
),
"111"
,
"222"
);
?-->
|
上面这个例子,自己运行一下看看结果是什么吧~嘿嘿~提示一下func_get_args()函数是获取传入到函数中的参数,返回一个数组,func_num_args()函数获取传入函数中的参数的个数。
下面再来看看
call_user_func_array函数
这个函数也是当需要动态调用函数时用到的,它的用法和call_user_func函数比较像,只是参数传入的是数组。
1
2
3
4
5
6
7
8
9
10
|
<!--?
function
a(
$b
,
$c
)
{
echo
$b
;
echo
$c
;
}
call_user_func_array(
'a'
,
array
(
"111"
,
"222"
));
//显示 111 222
?-->
|
call_user_func_array函数也可以调用类内部的方法的
1
2
3
4
5
6
7
8
9
10
11
12
|
<!--?
Class ClassA
{
function
bc(
$b
,
$c
) {
$bc
=
$b
+
$c
;
echo
$bc
;
}
}
call_user_func_array(
array
(
'ClassA'
,
'bc'
),
array
(
"111"
,
"222"
));
//显示 333
?-->
|
下面再看一个动态调用函数的例子:是从网上找来的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<!--?
function
otest1 (
$a
)
{
echo
(
'一个参数'
);
}
function
otest2 (
$a
,
$b
)
{
echo
(
'二个参数'
);
}
function
otest3 (
$a
,
$b
,
$c
)
{
echo
(
'三个啦'
);
}
function
otest (){
$args
= func_get_args();
$num
= func_num_args();
call_user_func_array(
'otest'
.
$num
,
$args
);
}
otest(
"11"
);
otest(
"11"
,
"22"
);
otest(
"11"
,
"22"
,
"33"
);
?-->
|
呵呵~上面这个例子,还是你们自己运行一下,那样印象更加深刻~
文中的例子来自于:http://hi.baidu.com/yxpd1209/blog/item/b62a771871581ff7ae513341.html