PHP的伪重载
<? 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 ?>
转自: http://www.cnitblog.com/neatstudio/archive/2006/07/21/13949.html
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 ?>
转自: http://www.cnitblog.com/neatstudio/archive/2006/07/21/13949.html