PHP—接口

接口(修饰词interface)

接口是一个类的规范,说白了,接口就是一个类的模版,一个类的规定,如果你属于这个类,那你必须按我的规定来,少一个都不行,但是具体你怎么做,我不管

比如:公司要招五个程序员,要求是:会写代码,会喝酒,能加班,五个测试工程师,要求是:会测试

interface iCoder
{
    function write();
    function drink();
    function work_overtime();
}
interface iTester
{
    function test();
}

接口的继承(修饰词extends)

接口的继承就是增加需求,子接口除了父接口的方法,也可以定义自己的方法

比如:公司要求招一个产品经理,既要会程序员的活,又要会测试工程师的活,还得会管理

interface iPM extends iCoder,iTteser
{
    function manager();
}

接口的实现(修饰词implements)

接口本身是不可以实例化的,否则会报致命错误Fatal error: Cannot instantiate interface,必须通过子类来实现接口,然后实例化子类

比如:你通过第三方来招人,你把要求(接口)给第三方,第三方会按照你的要求进行招聘,但是你的要求必须全部符合,少一条都不行,但是如果招来的人比较牛,除了你的要求还会其他的技能,那也是达标的

class Employee implements iCoder
{
    //接口定义的方法,子类必须全部要写实现,少一个都不行
    function write()
    {
        echo '会写代码';
    }
    function drink()
    {
        echo '会喝酒';
    }
    function work_overtime()
    {
        echo '能加班';
    }
    //这个人比较牛,还会跳舞,但是也是符合要求的,不影响工作
    function dancer()
    {
        echo '会跳舞';
    }
}

总结

  • 接口是一种特殊的抽象类,而抽象类又是特殊的类,因此接口也是一种特殊的类
  • 不可以声明变量,可以声明常量,用关键字const来声明
  • 只定义方法名称,方法中不可以写具体实现,具体实现需要通过子类来实现
  • 接口的方法必须是public,不可以为protected、private
  • 接口不可以实例化,必须通过子类来实现,然后实例化子类
  • 子类必须要实现接口的所有方法,可以多不可以少
  • 子类可以实现多个接口,即遵守多个规范
  • 子接口可一个继承多个父接口

版权声明:本文为johnhan9原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。