一.php 接口(interface)
1.接口的定义:
接口可以理解为类的模版,提前定义实现它的类需要实现哪些功能。
2.接口的特点:
1)上下级接口可以通过extends关键词继承
2)接口的所有方法默认都是public权限(因为具体功能要靠实现类实现)
3)接口可以定义常量,不能定义变量
4)一个类可以同时”implements”(实现)一到多个接口;
5)实现类必须实现所有接口定义好的功能,不然会报错
6)接口不能实例化操作,所以要使用接口中的成员,就必须借助实现类(implements)实现
3.接口的语法:
interface 接口名称{
//常量成员
//抽象方法
}
下面简单演示一个接口的使用:
定义一个文章接口:
interface Article{
const name = "小说阅读网";
public function publishArticle();
}
定义一个评论和回复的功能:
interface question{
public function ask();
public function answer();
}
接口的继承:定义一个转发功能,但必须有文章发布功能,所以让转发功能继承文章发布功能
interface Aritcle2 extends Article{
public function relayArticle();
}
接口的实现类:接下来就implements实现接口的功能实现所有接口的功能:
class Xiaoshuo implements Aritcle2,question{
public function publishArticle(){
echo "发布了一篇文章"."<br>";
}
public function relayArticle(){
echo "转发了一篇文章"."<br>";
}
public function ask(){
echo "提了一个问题"."<br>";
}
public function answer(){
echo "回答了一个问题"."<br>";
}
}
接下来我们实例化一下这个类:
$xs = new Xiaoshuo();
$xs->answer();
echo $xs::name;
二.抽象类 (abstract)
抽象类的特点:
1)定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
2)继承一个抽象类的时候,子类必须定义父类中的所有抽象方法
3)和接口相比,接口只有基本框架,描述了每个方法的功能,相当于一个毛坯房,而抽象类则相当于简装房,实现类就相当于精装房,实现了接口和抽象类的抽象方法的”工作类”。
4)抽象类通常具有抽象方法,方法中没有大括号,抽象类的抽象方法不实现具体功能,由子类完成
5)如果抽象方法有参数,那子类的实现也必须要有相同的参数数量
例如我们定义一个问题回答平台的抽象类:
abstract class questionPlatform {
public function write($author,$questionTitle){
return $author."写了一篇回答:".$questionTitle;
}
//抽象方法:
abstract public function answerQuestion($asker,$question);
}
抽象类和接口一样不可以直接实例化,必须通过子类才能使用
接下来我们通过extends实现这个抽象类:
class inpQuestion extends questionPlatform{
// 实现抽象方法:
public function answerQuestion($asker,$question){
return $asker."提了一个问题:".$question;
}
}
接下来我们实例化并调用一下
$qus = new inpQuestion();
echo "<hr>";
echo $qus->answerQuestion("小李","PHP真的不难吗?");
echo "<hr>";
echo $qus->write("张三","PHP真不难");