func_get_arg,func_get_args,func_num_args实现PHP伪重载

来源:互联网 发布:苹果装机必备软件 编辑:程序博客网 时间:2024/06/05 10:26

天在看书的时候,发现书上有这么一条:函数重载的替代方法——伪重载

确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数在看到了func_get_arg,func_get_args,func_num_args,这三个函数的时候,你们是不是想起了什么?

So,let's try it...

view source
?
01<?php
02function  testOne($a) {
03echo ('一个参数就这样 ');
04}
05 
06function testTwo($a$b) {
07    echo ('两个参数的就这样 ');
08}
09 
10function testThree($a$b$c) {
11    echo ('呵呵,这是三个参数的 ');
12}
13 
14function test() {
15    $argNum = func_num_args();
16 
17    // 这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵
18    for ($i = 0; $i $argNum$i++) {
19        $_arg_{$i} = func_get_arg($i);
20    }
21 
22    switch ($argNum) {
23        case 1 :
24            testOne($_arg_1);
25        break ;
26        case 2 :
27            testTwo($_arg_1$_arg_2);
28        break ;
29        case 3 :
30            testThree($_arg_1$_arg_2$_arg_3);
31        break ;
32        default :
33            echo (' 这是没有参数的情况 ');
34        break ;
35    }
36}
37 
38/**
39 * 例子的实现
40 */
41test();
42echo ('<br>');
43test(1);
44echo ('<br>');
45test(1, 2);
46echo ('<br>');
47test(1, 2, 3);
48 
49// 这些只是在函数中的运用,其实最主要的还是在类中的运用
50// 如果这些用到类里面我就不需要担心构造函数是否有几个参数了,不是吗?
51// 类里面的运用只举一个简单的例子
52 
53class test
54{
55    var $a = 0;
56    var $b = 0;
57 
58    function test() {
59        $argNum = func_num_args();
60        $_arg = func_get_args();
61        switch ($argNum) {
62            case 1 :
63                $this->test1($_arg[0]);
64            break ;
65            case 2 :
66                $this->test2($_arg[0], $_arg[1]);
67            break;
68            default :
69                $this->a = 0;
70                $this->b = 1;
71            break;
72        }
73    }
74 
75    function test1($a) {
76        $this->a = $a;
77    }
78 
79    function test2($a$b) {
80        $this->a = $a;
81        $this->b = $b ;
82    }
83}
84?>
0 0
原创粉丝点击