接口类与抽象类的实际作用



1.php 接口类:【关键字】interface

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。 由于接口(interface)和类(class)、trait 共享了命名空间,所以它们不能重名。

接口就像定义一个标准的类一样,通过 interface 关键字替换掉 class 关键字来定义,但其中所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。(这是php官方文档对它的描述)

比如 :

 
interface Connect
{
    public function post($url,$data);
    public function get($url);
 
}


上面定义了一个Connect接口类,定义了三个方法:post,get,那么继承此类的所有子类都必须实现这两个方法,如果子类没有实现这些话,就无法运行。

 
class AliConnect implements Connect
{
    public function post($url,$data)
    {
        echo('发起了ali的post请求');
    }
    public function get($gid)
    {
       echo('发起了ali的get请求');
    }
   
}

class wechatConnect implements Connect
{
    public function post($url,$data)
    {
        echo('发起了wechat的post请求');
    }
    public function get($gid)
    {
       echo('发起了wechat的get请求');
    }
   
}


结论 : 接口类就像是针对拥有相似业务但是有不同具体处理情况的时候使用。定义了他们之间一个通用的规范。


2.php 抽象类 : 【关键字】abstract

支持抽象类和抽象方法。定义为抽象的类不能被实例化任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数,而父类抽象方法的声明里没有,则两者的声明并无冲突。 这也适用于 PHP 5.4 起的构造函数。在 PHP 5.4 之前的构造函数声明可以不一样的

abstract class AbstractConnect
{
    abstract protected function get($url){}

    abstract protected function post($url,$data){}

    public function checkToken($token)
    {
        if(Redis::exist($token)){
                return true;
            }else{
                return false;    
            }
    }
}

上述抽象类中的方法,除了抽象方法需要在继承的子类中重新定义,其他的普通方法都可以直接使用。并且抽象方法的属性也是需要和父抽象类一样为protected 
class AliConnect extends AbstractConnect
{
   protected function post($url,$data)
    {
       if( $this->checkToken('ali_token')){
                 echo('发起了ali的post请求');
            }
    }
    protected function get($gid)
    {
          if( $this->checkToken('ali_token')){
                     echo('发起了ali的get请求');
            }
    }
   
}

class wechatConnect extends Connect
{
    protected function post($url,$data)
    {
         if( $this->checkToken('wechat_token')){
                  echo('发起了wechat的post请求');
            }
        
    }
    protected function get($gid)
    {
          if( $this->checkToken('wechat_token')){
                  echo('发起了wechat的get请求');
           }
    }
   
}


结论: 抽象类定义了哪些类是继承的子类必须要有的,但是对于那些具有同样操作的方法,就可以直接在抽象类中定义为普通方法,从而无需继承类在重新定义执行内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值