抽象类和接口

1. 抽象类

抽象类,即abstract class,介绍抽象类之前先介绍抽象方法。

类中的没有方法体的方法就是抽象方法,一般会用关键字 abstract 定义抽象方法。

抽象方法的一般格式为:

abstract 可见性 function 方法名称(参数1,.....);

抽象类中既可以包含抽象方法,也可以包含普通方法;抽象类不一定有抽象方法;有抽象方法的类一定是抽象类。

抽象类的一般格式为:

abstract class 类名{
    属性;
    抽象方法;
    普通方法;
}

下面定义一个抽象类:

<?php
abstract class AbstractClass
{
    // 定义两个抽象方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 定义一个普通方法
    public function printOut() {
        print $this->getValue() . "\n";
    }
}
?>

关于抽象类的几点说明:

  • 抽象类不能实例化,只能被继承(extends)。
  • 抽象方法的可见性不能是私有的(private)。
  • 父类的抽象方法必须在子类中重写。
  • 抽象方法只需声明必填参数,在子类中重写时,可声明可选参数。

2. 接口

接口是抽象类的变体,接口中所有的方法都是抽象方法(没有方法体),接口中除了可以包含方法外,还可以包含常量。

这里的接口是狭义的,广义的接口是任何一个可以对外提供服务的出口,如:提供数据传输的USB接口、支付宝开放平台的接口、微信公众平台的开放API等。下面我们要说的接口都是狭义的 interface 接口。

一般用关键字 interface 定义接口。

接口定义了一套规范,它描述了一个“物”的基本功能。如果一个类(class)实现(implements)了某个接口(interface),我们便知道这个类实现了什么功能。

接口本身并不提供实现,只是提供了一个规范。

在PHP中,接口的语义是有限的,使用接口的地方并不多,PHP中的接口可以淡化为设计文档,起到一个团队开发基本契约的作用。

下面定义一个缓存接口:

<?php
/**
 * 缓存处理接口(项目经理定义接口,技术人员实现接口)
 *
 **/
interface Cache {

    const MAX_KEY = 10000;    // 最大缓存量

    public function set($key, $value);    // 写入缓存

    public function get($key);    // 读取缓存

    public function del($key);    // 删除某个缓存

    public function flush();    // 清空缓存
}
?>

关于接口的几点说明:

  • 接口中的所有方法必须是抽象方法,且可见性必须是public
  • 一个类一旦实现( implements)了某个接口,就必须实现接口中的所有方法。
  • 接口与接口之间也可以继承( extends),且接口的继承是多继承,也就是说一个子接口可以继承多个父接口,中间用逗号隔开.
  • 一个类也可以实现(implements)多个接口,中间用逗号隔开
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值