1
<?
php
2
3
4
//
今天在看书的时候,发现书上有这么一条:函数重载的替代方法————伪重载
5
//
6
//确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数
7
//在看到了func_get_arg,func_get_args,func_num_args,这三个函数的时候,你们是不是想起了什么?
8
//SO,let's try it..
9
10
function
testOne (
$a
)
11
{
12
echo
(
'
一个参数就这样
'
);
13
}
14
15
function
testTwo (
$a
,
$b
)
16
{
17
echo
(
'
两个参数的就这样
'
);
18
}
19
20
function
testThree (
$a
,
$b
,
$c
)
21
{
22
echo
(
'
黑黑,这是三个参数的
'
);
23
}
24
25
function
test ()
26
{
27
$argNum
=
func_num_args
();
28
//
这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵
29
for
(
$i
=
0
;
$i
<
$argNum
;
$i
++
)
30
{
31
$_arg_
{
$i
}
=
func_get_arg
(
$i
);
32
}
33
switch
(
$argNum
)
34
{
35
case
1
:
36
testOne(
$_arg_1
);
37
break
;
38
case
2
:
39
testTwo(
$_arg_1
,
$_arg_2
);
40
break
;
41
case
3
:
42
testThree(
$_arg_1
,
$_arg_2
,
$_arg_3
);
43
break
;
44
default
:
45
echo
(
'
这是没有参数的情况
'
);
46
break
;
47
}
48
}
49
50
/*
*
51
* 例子的实现
52
*
53
*/
54
test();
55
echo
(
'
<br>
'
);
56
test(
1
);
57
echo
(
'
<br>
'
);
58
test(
1
,
2
);
59
echo
(
'
<br>
'
);
60
test(
1
,
2
,
3
);
61
62
63
64
//
这些只是在函数中的运用,其实最主要的还是在类中的运用
65
//如果这些用到类里面我就不需要担心构造函数是否有几个参数了,不是吗?
66
//类里面的运用只举一个简单的例子
67
68
class
test
69
{
70
var
$a
=
0
;
71
var
$b
=
0
;
72
73
function
test ()
74
{
75
$argNum
=
func_num_args
();
76
$_arg
=
func_get_args
();
77
switch
(
$argNum
)
78
{
79
case
1
:
80
$this
->
test1(
$_arg
[
0
] );
81
break
;
82
case
2
:
83
$this
->
test2(
$_arg
[
0
]
,
$_arg
[
1
]);
84
break
;
85
default
:
86
$this
->
a
=
0
;
87
$this
->
b
=
1
;
88
break
;
89
}
90
}
91
92
function
test1 (
$a
)
93
{
94
$this
->
a
=
$a
;
95
}
96
97
function
test2 (
$a
,
$b
)
98
{
99
$this
->
a
=
$a
;
100
$this
->
b
=
$b
;
101
}
102
}
103
104
105
?>