1、接口的介绍与创建
=====(1)抽象类 第八节中讲过。在这里在讲一哈====
(1)抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象 类或者方法我们需要使用adstract关键字
(2)抽象方法和抽象类的定义:
(1)类中至少有一个抽象方法,并且类和方法前都要加 abstract
(2)抽象方法不允许有{ }
(3)抽象类和方法使用规则
(1)不能被实例化,只能被继承
(2)继承后派生类,要把抽象方法进行,重载 才能被实例化
(3)重载抽象类中的抽象方法时候,要去掉abstract , 并先继承 class 派生类 extends 抽象类(基类){} 按继承方法继承类
难后function 抽象方法名{} 来进行重载
*/
/*
(2)=====接口======
(1)接口:就是一种成员属性-》1接口类方法为抽象方法 2接口类属性为常量 的的特殊抽象类,
(1)、接口类中抽象方法前不用加abstract,但是和抽象类的方法一样同样也不要{}
(2)、接口(类)中方法全部为抽象方法,接口(类)方法属性为public
(3)、成员属性必须为常量 CONST(常量和变量不同,一次定义,不能在进行修改,不需要实例化也能 在任何位置用双冒号形式输出)
(4)、创建接口使用interface 关键字 -》使用方法interface 接口名{}
(5)举个例子
interface jiekou { //创建接口类
//创建接口类属性
const NAME="名字"; //创建接口类属性 为 常量NAME
//创建接口类方法
function fun1(); //创建接口类抽象方法 前面无需要abstract
function fun2(); //创建接口类抽象方法 前面无需要abstract
}
*/
/*
(3)====抽象类 和 接口的共同点====
(1)本身都不能被实例化,
(2)1,抽象类继承后 或者 2,接口被引用后 必须将他们重载其中的类方法,才能被实例化,必须一次性重载所有的抽象方法
*/
/*
(4)总结,接口属于一种特殊的抽象类,所以在这里我称接口为,接口类
*/
/* 2、接口的引用与规范
(1) 接口引用区 (类继承关键字 extends,只能是单一性继承),而
接口可以使用关键字:implements 多个引用并用逗号 , 分开。
(2)假设有3个接口 jiek1 jiek2 jiek3
(1)普通类来引用接口 ----引用接口后需要实重载才能实例化
class plei implements jiek1,jiek2,jiek3{
...........
}
(2)抽象类来引用接口 ----抽象类 引用接口后不能重载方法(因为依然还是一个抽象类,需要被非抽象的派生类继承后并重载才能实
例化
abstract class clei implements jiek1,jiek2,jiek3{
...........
}
(3)同时继承基类(父类) 并引用接口的例子 (要注意是先继承 后接口,单继承多接口)
class le2 extends le1 implements jiek1,jiek2,jiek3 {
..........................
}
(4)接口与接口继承(继承是单一性的 所以继承接口和继承类也只能单独继承一个)
interface jiek2 extends jiek1 { //这个创建接口用 interface 继承用 extends
........
}
*/
//实在里子==========================================
/*类的接口应用实例
* interface 创建接口
* implements 引用接口
*/
//创建接口类1-----------------
interface jiek1 { //创建接口类1
//创建接口类属性常量(接口类中只能有常量不能用变量)
const NAMEA1="接口1"; //创建接口类属性常量(常量最好大写,并且没有$符号)
//创建接口类方法 (接口类方法,是抽象方法,但是不加abstract,但是和抽象类的方法一样同样也不要{})
function fu1(); //创建接口类抽象方法1
function fu2(); //创建接口类抽象方法1
}
//创建接口类2------------
interface jiek2 { //创建接口类2
//创建接口类属性常量(接口类中只能有常量不能用变量)
const NAMEA2="接口2"; //创建接口类属性常量(常量最好大写,并且没有$符号)
//创建接口类方法 (接口类方法,是抽象方法,但是不加abstract,但是和抽象类的方法一样同样也不要{})
function fu3(); //创建接口类抽象方法3
function fu4(); //创建接口类抽象方法4
}
//用普通类来引用接口
class ptlei implements jiek1,jiek2{ //用普通类来引用多个接口
//重载 接口的抽象方法一 (引用抽象方法需要先重载在实例化--必须重载所有的抽象方法)
function fu1(){
echo "重载接口的抽象方法一 <br>";
}
//重载 接口的抽象方法二 (引用抽象方法需要先重载在实例化)
function fu2(){
echo "重载接口的抽象方法二 <br>";
}
//重载 接口的抽象方法三 (引用抽象方法需要先重载在实例化)
function fu3(){
echo "重载接口的抽象方法三 <br>";
}
//重载 接口的抽象方法四 (引用抽象方法需要先重载在实例化)
function fu4(){
echo "重载接口的抽象方法四 <br>";
}
}
//实例化 被引用接口后的类
$slh= new ptlei(); //实例化接口类
//输出实例化接口后的属性常量(不需要实例化也能 在任何位置用双冒号形式输出)
echo ptlei::NAMEA1."<br>"; //输出接口类属性常量1
echo ptlei::NAMEA2."<br>"; //输出接口类属性常量2
//输出实例化接口后的方法
$slh->fu1(); //输出 实例化接口类后的类方法1
$slh->fu2(); //输出 实例化接口类后的类方法2
$slh->fu3(); //输出 实例化接口类后的类方法3
$slh->fu4(); //输出 实例化接口类后的类方法4
//单继承多接口 (先继承后引用接口)-----------------------------------------------------------
//创建接口类3------------
interface jiek3 { //创建接口类2
//创建接口类属性常量(接口类中只能有常量不能用变量)
const NAMEA3="接口3"; //创建接口类属性常量(常量最好大写,并且没有$符号)
//创建接口类方法 (接口类方法,是抽象方法,但是不加abstract,但是和抽象类的方法一样同样也不要{})
function fu5(); //创建接口类抽象方法5
function fu6(); //创建接口类抽象方法6
}
//创建接口类3------------
interface jiek4 { //创建接口类2
//创建接口类属性常量(接口类中只能有常量不能用变量)
const NAMEA4="接口4"; //创建接口类属性常量(常量最好大写,并且没有$符号)
//创建接口类方法 (接口类方法,是抽象方法,但是不加abstract,但是和抽象类的方法一样同样也不要{})
function fu7(); //创建接口类抽象方法7
function fu8(); //创建接口类抽象方法8
}
//类继承+并引用接口
class ptlei2 extends ptlei implements jiek3,jiek4{
//重载 接口的抽象方法五 (引用抽象方法需要先重载在实例化)
function fu5(){
echo "重载接口的抽象方法五 <br>";
}
//重载 接口的抽象方法六 (引用抽象方法需要先重载在实例化)
function fu6(){
echo "重载接口的抽象方法六 <br>";
}
//重载 接口的抽象方法七 (引用抽象方法需要先重载在实例化)
function fu7(){
echo "重载接口的抽象方法七 <br>";
}
//重载 接口的抽象方法八 (引用抽象方法需要先重载在实例化)
function fu8(){
echo "重载接口的抽象方法八 <br>";
}
}
//实例化继承后和被引用接口后的类
$slh2= new ptlei2(); //实例化继承类+引用接口后类
//输出实例化继承后和被引用接口后的类的属性常量(不需要实例化也能 在任何位置用双冒号形式输出)
echo ptlei2::NAMEA1."<br>"; //输出实例化继承后和被引用接口后的类属性常量1
echo ptlei2::NAMEA2."<br>"; //输出实例化继承后和被引用接口后的类属性常量2
echo ptlei2::NAMEA3."<br>"; //输出实例化继承后和被引用接口后的类属性常量3
echo ptlei2::NAMEA4."<br>"; //输出实例化继承后和被引用接口后的类属性常量4
//输出实例化继承后和被引用接口后的类的方法
$slh2->fu1(); //输出实例化继承后和被引用接口后的类方法1
$slh2->fu2(); //输出实例化继承后和被引用接口后的类方法2
$slh2->fu3(); //输出实例化继承后和被引用接口后的类方法3
$slh2->fu4(); //输出实例化继承后和被引用接口后的类方法4
$slh2->fu5(); //输出实例化继承后和被引用接口后的类方法5
$slh2->fu6(); //输出实例化继承后和被引用接口后的类方法6
$slh2->fu7(); //输出实例化继承后和被引用接口后的类方法7
上一篇:php面向对象多态的介绍与优势
下一篇:php类中常见关键字