php抽象类和接口

摘要:
接口使用接口。您可以指定类必须实现哪些方法,但不需要定义这些方法的具体内容。我们可以通过接口定义接口,就像定义标准类一样,但接口中定义的所有方法都是空的。接口中定义的所有方法都必须是公共的才能实现接口。可以使用实现运算符,接口中定义的方法必须在类中实现。如果实现了多个接口,那么多个接口的名称可以用逗号分隔。请注意,当实现多个接口时,接口中的方法不能有重复的接口

接口

php抽象类和接口第1张
使用接口,你可以指定某个类必须实现那些方法,但是不需要定义这些方法的具体内容,我们可以通过interface来定义一个接口,就像定义标准类一样,但其中定义所有的方法都是空的,接口中定义的所有的方法都必须是public

实现一个接口,可以使用implement操作符,类中必须实现接口中定义的所用的方法,如果实现多个接口,可以用逗号来分割多个接口的名称

注意

  1. 实现多个接口时,接口中的方法不能有重名
  2. 接口也可以继承,通过使用extends操作符
  3. 接口中可以定义常量,接口常量和类常量的使用完全相同,他们都是定值,不能被子类或子接口修改

例子:

//声明接口
interfaceItemplate{
publicfunctionsetVariable($name,$var);
publicfunctiongetHtml($template);
}
//实现接口
classTemplate implementsItemplate{
private$vars=array();
publicfunctionsetVariable($name,$var){
$this->vars[$name]=$var;
}
publicfunctiongetHtml($template){
foreach($this->vars as$names=>$value){
$template=str_replace('{'.$names.'}',$value,$template);
}
return$template;
}
}

例子2:

interfacea{
publicfunctionfoo();
}
interfaceb{
publicfunctionbar();
}
//继承接口
interfacec extendsa,b{
publicfunctionbaz();
}
//实现接口
classd implementsc{
publicfunctionfoo(){
}
publicfunctionbar(){
}
publicfunctionbaz(){
}
}
interfacea{
constb="hello";
}

php抽象类和接口第2张

php抽象类和接口第3张 

抽象类

php5支持抽象类和抽象方法。抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类,任何一个类,如果他里面至少有一个方法是被声明为抽象的,那这个类就必须被声明为抽象的,如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现

继承一个抽象类的时候,子类必须实现抽象类中的所有的抽象方法,另外,这些方法的可见性必须和抽象类中一样(或更轻松),如果抽象类中的某个抽象方法被声明为proteected,那么子类中实现的方法应该声明为pritected或者public

例子:

abstractclassAbstractClass{
//抽象方法
abstractprotectedfunctiongetValue();
abstractprotectedfunctionprefieValue($p);
//普通方法(非抽象方法)
publicfunctionprintOut(){
print$this->getValue();
}
}
classConcreteClass1 extendsAbstractClass{
protectedfunctiongetValue(){
return"ConcreteClass1";
}
publicfunctionprefieValue($p){
return"{$p}concreteclass1";
}
}
classConcreteClass2 extendsAbstractClass{
protectedfunctiongetValue(){
return"ConcreteClass2";
}
publicfunctionprefieValue($p){
return"{$p}concreteclass2";
}
}
$class1=newConcreteClass1();
$class1->printOut();
echo$class1->prefieValue('FOO_');
/*

打印结果:ConcreteClass1

FOO_concreteclass1

2. 调用静态方法的抽象类仍然可行的 类常量不可以的

abstractclassFoo
{ consta="hello";
staticfunctionbar()
{
echo"test ";
}
}
Foo::a;//没有输出
Foo::bar();//test

免责声明:文章转载自《php抽象类和接口》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇BI笔记之SSAS库Process的几种方案java 使用qrcode生成二维码图片或者base64字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

keycloak~自定义rest接口

rest资源 对于我们集成keycloak来说,你可能会遇到它没有实现的功能,这时需要对kc进行扩展,资源的扩展是其中一个方面,它需要实现RealmResourceProvider和RealmResourceProviderFactory两个接口,然后在KC启动之后,它可以被注册到IOC容器里,方便以后我们直接使用。 KC里的扩展是开闭原则OCP的完美体现...

PHP开发api接口安全验证(转)

php的api接口 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证。 验证原理 示意图 原理 从图中可以看得很清楚,前台想要调用接口,需要使用...

(项目)使用接口自动登陆滴滴打码网站

目标   使用接口实现自动登陆滴滴打码。 分析 1 打开滴滴打码登陆网站:http://www.ddocr.com/user/login.html 。 2 查看接口  1)发现有一个get型接口:login.html  如下图所示。这个接口用于我们请求登陆界面。   2)还发现了一个get型接口:code.html  如下图所示。这个接口用来请求登陆界面...

Linux设备驱动程序学习(17)-USB 驱动程序(二)

内核使用2.6.29.4USB设备其实很复杂,但是Linux内核提供了一个称为USB core的子系统来处理了大部分的复杂工作,所以这里所描述的是驱动程序和USB core之间的接口。 在USB设备组织结构中,从上到下分为设备(device)、配置(config)、接口(interface)和端点(endpoint)四个层次。 对于这四个层次的简单描述如下...

Android系统--输入系统(六)模拟输入驱动程序

Android系统--输入系统(六)模拟输入驱动程序 1. 回顾输入子系统 简单字符设备驱动:应用程序通过调用驱动所实现的函数使能硬件。 输入子系统:由于有多个应用程序使用输入子系统,故肯定使用的是早已规定好驱动接口,我们所需要实现的这是实现硬件相关的操作。 2. 输入子系统特性 有多套open/read/write接口 当应用程序调用这些接口,驱...

webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲解SpringMVC+CXF环境下,怎么调用其他系统通过webService方式暴露出来的接口 ① 为避免怀疑同一个项目中调用本项目的接口,这里我新打开一个e...