博客列表 >PHP的接口(interface)和抽象类(abstract)

PHP的接口(interface)和抽象类(abstract)

Jason Pu?
Jason Pu?原创
2021年02月04日 19:15:472652浏览

一.php 接口(interface)

1.接口的定义:
接口可以理解为类的模版,提前定义实现它的类需要实现哪些功能。

2.接口的特点:
1)上下级接口可以通过extends关键词继承
2)接口的所有方法默认都是public权限(因为具体功能要靠实现类实现)
3)接口可以定义常量,不能定义变量
4)一个类可以同时”implements”(实现)一到多个接口;
5)实现类必须实现所有接口定义好的功能,不然会报错
6)接口不能实例化操作,所以要使用接口中的成员,就必须借助实现类(implements)实现

3.接口的语法:

  1. interface 接口名称{
  2. //常量成员
  3. //抽象方法
  4. }

下面简单演示一个接口的使用:

定义一个文章接口:

  1. interface Article{
  2. const name = "小说阅读网";
  3. public function publishArticle();
  4. }

定义一个评论和回复的功能:

  1. interface question{
  2. public function ask();
  3. public function answer();
  4. }

接口的继承:定义一个转发功能,但必须有文章发布功能,所以让转发功能继承文章发布功能

  1. interface Aritcle2 extends Article{
  2. public function relayArticle();
  3. }

接口的实现类:接下来就implements实现接口的功能实现所有接口的功能:

  1. class Xiaoshuo implements Aritcle2,question{
  2. public function publishArticle(){
  3. echo "发布了一篇文章"."<br>";
  4. }
  5. public function relayArticle(){
  6. echo "转发了一篇文章"."<br>";
  7. }
  8. public function ask(){
  9. echo "提了一个问题"."<br>";
  10. }
  11. public function answer(){
  12. echo "回答了一个问题"."<br>";
  13. }
  14. }

接下来我们实例化一下这个类:

  1. $xs = new Xiaoshuo();
  2. $xs->answer();
  3. echo $xs::name;


二.抽象类 (abstract)

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

2)继承一个抽象类的时候,子类必须定义父类中的所有抽象方法

3)和接口相比,接口只有基本框架,描述了每个方法的功能,相当于一个毛坯房,而抽象类则相当于简装房,实现类就相当于精装房,实现了接口和抽象类的抽象方法的”工作类”。

4)抽象类通常具有抽象方法,方法中没有大括号,抽象类的抽象方法不实现具体功能,由子类完成

5)如果抽象方法有参数,那子类的实现也必须要有相同的参数数量


例如我们定义一个问题回答平台的抽象类:

  1. abstract class questionPlatform {
  2. public function write($author,$questionTitle){
  3. return $author."写了一篇回答:".$questionTitle;
  4. }
  5. //抽象方法:
  6. abstract public function answerQuestion($asker,$question);
  7. }

抽象类和接口一样不可以直接实例化,必须通过子类才能使用
接下来我们通过extends实现这个抽象类:

  1. class inpQuestion extends questionPlatform{
  2. // 实现抽象方法:
  3. public function answerQuestion($asker,$question){
  4. return $asker."提了一个问题:".$question;
  5. }
  6. }

接下来我们实例化并调用一下

  1. $qus = new inpQuestion();
  2. echo "<hr>";
  3. echo $qus->answerQuestion("小李","PHP真的不难吗?");
  4. echo "<hr>";
  5. echo $qus->write("张三","PHP真不难");

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议