php类重载

首先,因为PHP是弱类型语言,是不直接支持重载的,不过可以通过一些方法来实现重载。

先说一下重写

在子类继承父类方法后,自己重新定义父类的方法,包含函数名,形参(个数,顺序)完全相同,但权限修饰符可不同,子类的的权限修饰符应该大于等于父类的权限修饰符。

    class Animal{
        public function cat($var1,$var2)
        {
            echo 'Hello,'.$var1.$var2;
        }
    }

    class Small extends Animal{
        public function cat($a1, $a2){
            echo 'cat cat cat!!!'.$a1.$a2;
        }
    }

    $a = new Small();
    $a->cat(1,2);

    $b  = new Animal();
    $b->cat('laibao','hh');

重载,多态的一种形式,通过对同一函数传值的不同,来获取不同的逻辑处理。但PHP是弱类型语言,不像JAVA、C++一样强类型,直接支持重载,不过 可以通过以下方式来间接的实现重载。

<?php  
       
        function test1($name){  
            echo $name;  
        }  
   
        function test2($name,$age){  
            echo $name.$age;  
        }  
   
        function load(){  
            //返回输入的元素数目  
            $num=func_num_args();  
            //返回输入元素列表的数组形式  
            $arr=func_get_args();  
               
            if($num==1){  
                test1($arr[0]);  
            }else {  
                test2($arr[0],$arr[1]);  
            }  
        }  
   
    load("a");  
    echo "";  
    load("a","b");  
?>
<?php  
    class A{  
        //name :调用的方法名字。args:参数列表  
        function __call($name,$args){  
            $num=count($args);  
            if($num==1){  
                $this->test1($args[0]);  
            }  
            else {  
            $this->test2($args[0],$args[1]);  
            }  
        }  
   
        function test1($name){  
            echo $name;  
        }  
        function test2($name, $age){  
            echo $name." ".$age;  
        }  
    }  
       
    $a=new A();  
    $a->a("a");  
    echo "";  
    $a->a("a","b");  
   
?>

猜你喜欢

转载自www.cnblogs.com/wanghaokun/p/10627385.html