接口

interface 在接口内定义方法,可不提供具体的代码实现

作用:提供一个规范,如果我们知道一个类实现了某个接口,那么就知道了可以调用该接口的那些方法,我们只需要知道这些就够了。

          当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,我怎么知道他的某个功能的实现方法是怎么命名的呢,我们定义了一个接口类时,

          它里面的方式是下面的子类必须实现的,

 

//声明一个shop接口类,定义了三个方法:买(buy),卖(sell),看(view)
interface Shop   
{   
public function buy($gid);   
public function sell($gid);   
public function view($gid);   
}  

 

实现给接口时,必须实现该接口的三个方法

    class BaseShop implements Shop   
    {   
    public function buy($gid)   
    {   
    echo('你购买了ID为 :'.$gid.'的商品');   
    }   
    public function sell($gid)   
    {   
    echo('你卖了ID为 :'.$gid.'的商品');   
    }   
    public function view($gid)   
    {   
    echo('你查看了ID为 :'.$gid.'的商品');   
    }   
    }   
$a=new BaseShop;
    $a->buy(1);//执行buy方法

当我们在团队开发时,接口提供的规范,将提高我们的开发效率

 抽象类

抽象类就把类像的部分抽出来,当你发现你的很多类里面用很多方法你不断的在重复写,那你就可以考虑使用抽象类了

注意:对于抽象类中的方法,子类不用全部实现,对于抽象方法,子类必须实现,若非抽象方法,之类可以重写覆盖
<?php
 abstract class BaseShop   
{   
public function buy($gid)   
{   
echo('你购买了ID为 :'.$gid.'的商品');   
}   
public function sell($gid)   
{   
echo('你卖了ID为:'.$gid.' 的商品');   
}   
abstract  function view();    
}   
class BallShop extends BaseShop   
{   
var $itme_id = null;   
public function __construct()   
{   
$this->itme_id = 2314;   
}   
public function open()   
{   
$this->buy($this->itme_id);   
}  
public function sell(){
echo "新的sell方法"; 
}
function view(){
    echo "实现抽象方法 ";
}
}
$a=new BallShop;
$a->open();
$a->sell();
$a->view();
?>
//结果:你购买了ID为 :2314的商品 新的sell方法  实现抽象方法

 

 

抽象类里实现了这些方法,那么继承它的子类就自动获得了这些方法,子类就做它自己独特的东西,介绍代码的重复,提高复用性。

 

接口和抽象类的区别:

  • 对接口的使用方式是通过关键字implements来实现的,而对于抽象类的操作是使用类继承的关键字exotends实现的,使用时要特别注意。
  • 接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装。
  • 接口没有构造函数,抽象类可以有构造函数。
  • 接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。
  •  一个类可以同时实现多个接口,但是只能实现一个抽象类。
  • 如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
  • 如果必须从多个来源继承行为,就使用接口。
  • 如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。
posted on 2017-07-28 11:19  224杨晓潮  阅读(498)  评论(0编辑  收藏  举报