php 接口技术

什么是接口?

先来看抽象类:抽象类是不能被实例化的类,任何一个类,如果它里面至少有一个方法被声明为抽象的,那么这个类就必须被声明为抽象的。

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

(当然抽象类中也可以没有抽象方法,但是含有抽象方法的类必须被定义为抽象类)。

如:abstract class 类名{

属性1;

属性2;

非抽象方法(){}

抽象方法1();

抽象方法2();

}

设想一下,将上述抽象类中的“实在的成员”删除,即删除那些非抽象的成员,那么该抽象类中就只有抽象方法:

如:abstract class 类名{

抽象方法1();

抽象方法2();

}

由此,可以理解为:这个类“太抽象了”,几乎自己什么都没做,就是让别人来做;

那么:接口就与这个“太抽象的类”类似;

    接口,就是规定,里面只能放“抽象方法”和“常量”的一种类似类的结构体;

因此,接口是“比抽象类更抽象的”一种语法。



接口的定义形式(interface):

如:interface 接口名{

常量1;

常量2;

...........

抽象方法1;

抽象方法2;

...........

}

说明:1.可见接口中只有“常量”和“抽象方法”两种成员;

    2.接口常量的使用形式为:接口名::常量名称;

    3.接口中的抽象方法不要使用abstract修饰,也不需要使用访问控制符修饰,因为其天然就是public修饰;

例:interface A{

const PI = 3.14;

const CC1 = 1 ;

function Show1();//抽象方法,无形参

function Func2($p1,$p2);//抽象方法,2个形参

}


为什么需要接口?

面向对象的编程思想是对“现实世界”的描述,而现实世界往往是多继承关系;

但:

出于降低类与类之间的关系的复杂度的考虑,将PHP语言设计为单继承的;但这样就无法表达出现实世界的多继承特性;

所以:

接口就是对没有多继承的类之间关系的一个补充;因为接口可以实现“多继承”,只是此时不称为“继承”而是称为“实现”而已;

即:接口1——》类1;

就称为:类1实现的接口1;

其本质:是类1中有了接口1中的“特征信息”;

例:

<?php

/*定义Player接口
*接口中的抽象方法不要使用abstract修饰,也不需要使用访问控制符修饰,因为其天然就是public修饰;
 * */
interface Player{
    function play();
    function stop();
    function next();
    function prev();
}
/*定义USBset接口
*  接口,就是规定,里面只能放“抽象方法”和“常量”的一种类似类的结构体;
 * */
interface USBset{
    const USBWidth = 12;
    const USBHeight = 5;
    function dataIn();//数据输入
    function dataOut();//数据输出
}

/*这里MP3Player类必须实现Player,USBset中的所有方法
*php语言中一个类不可以继承多个类,但是一个类可以继承多个接口
 * */
class MP3Player implements Player,USBset {
    function Play(){}
    function stop(){}
    function next(){}
    function prev(){}
    function dataIn(){}
    function dataOut(){}
}


猜你喜欢

转载自blog.csdn.net/little_rabbit_baby/article/details/53815957