Blogger Information
Blog 37
fans 1
comment 0
visits 32734
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP的接口(interface)和抽象类(abstract)
Jason Pu?
Original
2662 people have browsed it

一.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真不难");

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post