php中抽象类和接口的概念和区别

来源:互联网 发布:centos 7 加载驱动 编辑:程序博客网 时间:2024/05/16 17:21

    php中抽象类和接口的概念和区别

    1. //抽象类的定义:  
    1. abstract class ku{  //定义一个抽象类  
    1.   abstract function kx();  
    2.   ......  
    3. }  
    4.   
    1. function aa extends ku{  
    1.   //实现抽象类的方法  
    1.   function kx(){  
    1.     echo 'sdsf';  
    2.   }  
    1. }  
    2.   
    1. //使用方法  
    1.   
    1. $aa=new aa;  
    2. $aa->kx();  
    1.   
    1. //1.定义一些方法,子类必须完全实现这个抽象中所有的方法  
    1. //2.不能从抽象类创建对象,它的意义在于被扩展  
    2. //3.抽象类通常具有抽象方法,方法中没有大括号  
    3. //4.抽象方法不必实现具体的功能,由子类来完成  
    4. //5.在子类实现抽象类的方法时,其子类的可见性必须大于或等于抽象方法的定义  
    5. //6.抽象类的方法可以有参数,也可以为空  
    6. //7.如果抽象方法有参数,那么子类的实现也必须有相同的参数个数  
    1.   
    2.   
    3.   
    4.   
    1.   
    1. //////////////////////////////接口类的定义:  
    1. interface Shop{  
    1.       public   function buy($gid);  
    2.       public   function sell($gid);  
    3.       abstract function view($gid);  
    4. }  
    1. //如果要使用接口,必须定义接口类中的所以方法少一个都不可以(abstract除外)。  
    2. //这样如果在一个大项目中不管别人怎么去做下面的方法,但是他必须实现本接口中的所有方法才可以!  
    1.   
    1.   
    1. //例:实现上面的接口的一种方法  
    1. class BaseShop implements Shop{  
    1.    public function buy($gid){  
    1.       echo '你购买了ID :' . $gid . '的商品';  
    2.    }  
    3.    public function sell($gid){  
    4.       echo '你购卖ID :' . $gid . '的商品';  
    5.    }  
    6.    public function view($gid){  
    1.       echo '你浏览了ID :' . $gid . '的商品';  
    1.    }  
    2. }  
    3.   
    4.   
    1. //接口的多重继承示例:  
    1. <?php  
    1. interface staff_i1{ //接口1  
    1.   function setID();  
    2.   function getID();  
    3. }  
    4.   
    1. interface staff_i2{ //接口2  
    1.   function setName();  
    2.   function getName();  
    3. }  
    4.   
    1. class staff implements staff_i1,staff_i2{  
    1.   private $id;  
    2.   private $name;  
    3.   function setID($id){  
    4.     $this->id = $id;  
    5.   }  
    6.   
    7.   function getID(){  
    8.     return $this->id;  
    9.   }  
    10.   
    11.   function setName($name){  
    12.     $this->name = $name;  
    13.   }  
    1.   
    1.   function getName(){  
    1.     return $this->name;  
    1.   }  
    2.   
    3.   function otherFunc(){ //这是一个接口中不存在的方法  
    4.     echo “Test”;  
    5.   }  
    6. }  
    1. ?>  

            

     他们的不同点:

    1。抽象类中可以有非抽象的方法而接口中只能够有抽象的方法!

    2。一个类可以继承多个接口,而一个类只能继承一个抽象类!

    3。接口的使用方式通过implements关键字进行,抽象类则是通过继承extends关键字进行!

     

     

    fianl关键字用来定义类和方法不能被继承

    self用来访问

     

    instanceof检测一个对象是否来自哪个类

     

    __call($n,$v)异常处理

     

    __clone()对象克隆

     

     

     

     

     

     

     

     

     

     

原创粉丝点击