接口interface

思考:在大型项目中,如果想要规定某些类必须有某些方法,我们可以使用丞相类来进行规范吗?

引入:抽象类的目的就是用来规范一些共性子类的结构,必须实现某些指定的方法的,在php还有一种专用来规范类内容实现方法的结构叫做接口。

 

接口 interface【掌握】

定义:接口,使用interface关键字定义,专门用来规范一些共性类必须实现的方法

接口定义:使用interface关键字,后跟接口名字{与类结构一样},接口不是类,不可以被实例化

<?php

// 定义接口
interface show{

}

new show();            //致命错误  接口不能实例化

接口实现:接口时用来规范类必须完成的事情,所以接口只能被类实现:implements

<?php

// 定义接口
interface show{

}

// 实现接口
class posen implements show{}

接口成员:接口中只能定义公有抽象方法和接口常量

<?php

// 定义接口
interface show{

    //接口成员
    const NAME="杜伟";
    public function add();             //在接口中声明的方法,默认都会添加abstract关键字

    //其他内容,不能有成员
    // public $age;                      接口中不能有属性和成员
    // public static $count;             接口中不能有静态属性和成员    
}

// 实现接口
class posen implements show{
    // 实现接口方法
    public function add(){
        echo  __LINE__;
    }
}
echo posen::NAME; //常量输出
//抽象类实现接口中的抽象方法 abstract class wman implements show{ }

实现接口的类成员,不允许重写接口中的常量,不允许增加接口方法的控制权

<?php

// 定义接口
interface show{

    //接口成员
    const NAME="杜伟";
    public function add();             //在接口中声明的方法,默认都会添加abstract关键字

    //其他内容,不能有成员
    // public $age;                      接口中不能有属性和成员
    // public static $count;             接口中不能有静态属性和成员    
}

// 实现接口
class posen implements show{
    // 重写接口中的常量
    //const NAME="假名";             //报错 :不允许重写接口中的常量
    // 实现接口方法
    private function add(){
        echo  __LINE__;            //错误:接口方法不允许使用其他访问修饰限定符,必须使用public
    }
}

接口可以继承接口:extends,而且接口可以多继承接口

<?php

interface show{

    public function getname();
}

interface add{

    public function getage();

}
// 单继承
interface line extends getname{}

//多继承
 interface count extends add ,show{}

 

总结:

  接口是使用interface关键字定义,与类结构相似

  接口只能被类实现implements,方法默认自带abstract关键字

  接口成员只能有两种,接口常量和公有的抽象方法(没有方法体)

  类实现接口的时候,必须实现接口中所有的抽象方法(或者以抽象类实现)

  接口中的成员不能被实现接口类进行重写(接口常量)或权限更高(受保护或私有化接口方法)

  接口可以继承接口,而且可以多继承

  接口时在更大型的项目中,为了保证底层的实现而设定的规范,通常是抽象类实现接口,增加必要成员,然后让实际业务类去继承抽象类

 

posted @ 2020-02-13 11:21  WhiteSpace  阅读(147)  评论(0编辑  收藏  举报