php函数重载的原理


image.png

首先普及一下什么是重载:方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。(说白了就是函数名都一样,通过参数来区分执行的是哪个函数)。

对于弱类型语言来说,PHP函数重载,并不像一般的OOP那样,因为函数重载必须满足两个条件:1、函数参数的个数不一样;2、参数的类型不一样。而弱类型本来就不区分,所以无法通过这些来实现。但是,可以通过手动来实现简单的伪重载。

function testOne ( $a ) {
    echo (' 一个参数就这样 ');
}

function testTwo ( $a ,  $b ){
    echo (' 两个参数的就这样 ');
}

function testThree ($a,  $b,  $c ) {
    echo (' 黑黑,这是三个参数的 ');
}

function test () {
    $argNum  =  func_num_args ();
    // 这一段其实可以用 $_arg = func_get_args() 来获得所有的参数,只是要用数组而已,不方便我下面的表达,呵呵
    for ( $i  =  0 ; $i  <  $argNum ; $i ++ ) {
        $_arg_ { $i } =  func_get_arg ( $i );
    }
    switch ( $argNum ) {
        case  1 :
            testOne( $_arg_1 );
            break ;
        case  2 :
            testTwo( $_arg_1,  $_arg_2 );
            break ;
        case  3 :
            testThree( $_arg_1,  $_arg_2,  $_arg_3 );
            break ;
        default :
            echo ( ' 这是没有参数的情况 ' );
            break ;
    }
}
test();
echo ( ' ' );
test( 1 );
echo ( ' ' );
test( 1 , 2 );
echo ( ' ' );
test( 1 , 2 , 3 );


上面的代码是在函数中的运用,说明了其原理,但是实际应用起来还是在类中比较多

<?php
class test {
    var  $a  =  0 ;
    var  $b  =  0 ;

    function test () {
        $argNum  =  func_num_args ();
        $_arg  =  func_get_args ();
        switch ($argNum ) {
            case  1 :
                $this -> test1( $_arg [ 0 ] );
                break ;
            case  2 :
                $this -> test2( $_arg [ 0 ] ,  $_arg [ 1 ]);
                break ;
            default :
                $this -> a = 0 ;
                $this -> b = 1 ;
                break ;
        }
    }

    function test1 ($a) {
        $this -> a =  $a ;
    }

    function test2 ($a,  $b) {
        $this -> a =  $a ;
        $this -> b =  $b ;
    }
}

看完此篇后,还可阅读:【php实现重载的方法】http://blog.zhouchenxi.cn/post/47.html


本文 暂无 评论

Top