类与对象:对象接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。 

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。 

接口中定义的所有方法都必须是公有,这是接口的特性。 

实现(implements)

要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。 

Note: 

实现多个接口时,接口中的方法不能有重名。 

Note: 

接口也可以继承,通过使用 extends 操作符。 

Note: 

类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误。 

常量

接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。 

范例

Example #1 接口示例

<?php

// 声明一个'iTemplate'接口

interface iTemplate

{

    public function setVariable($name, $var);

    public function getHtml($template);

}

// 实现接口

// 下面的写法是正确的

class Template implements iTemplate

{

    private $vars = array();

    public function setVariable($name, $var)

    {

        $this->vars[$name] = $var;

    }

    public function getHtml($template)

    {

        foreach($this->vars as $name => $value) {

            $template = str_replace('{' . $name . '}', $value, $template);

        }

        return $template;

    }

}

// 下面的写法是错误的,会报错,因为没有实现 getHtml():

// Fatal error: Class BadTemplate contains 1 abstract methods

// and must therefore be declared abstract (iTemplate::getHtml)

class BadTemplate implements iTemplate

{

    private $vars = array();

    public function setVariable($name, $var)

    {

        $this->vars[$name] = $var;

    }

}

?>  

Example #2 可扩充的接口

<?php

interface a

{

    public function foo();

}

interface b extends a

{

    public function baz(Baz $baz);

}

// 正确写法

class c implements b

{

    public function foo()

    {

    }

    public function baz(Baz $baz)

    {

    }

}

// 错误写法会导致一个致命错误

class d implements b

{

    public function foo()

    {

    }

    public function baz(Foo $foo)

    {

    }

}

?>  

Example #3 继承多个接口

<?php

interface a

{

    public function foo();

}

interface b

{

    public function bar();

}

interface c extends a, b

{

    public function baz();

}

class d implements c

{

    public function foo()

    {

    }

    public function bar()

    {

    }

    public function baz()

    {

    }

}

?>  

Example #4 使用接口常量

<?php

interface a

{

    const b = 'Interface constant';

}

// 输出接口常量

echo a::b;

// 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。

class b implements a

{

    const b = 'Class constant';

}

?>  

接口加上类型约束,提供了一种很好的方式来确保某个对象包含有某些方法。参见 instanceof 操作符和类型约束。 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

php编程基础教程.pptx|php编程培训,php,编程,基础,教程,pptx
php编程基础教程.pptx

历史上的今天:04月29日

热门专题

一年制中专|中专学历,中专是什么学历,中专是什么,中专有什么专业,中专升大专,一年制中专
一年制中专
昆明综合高中|昆明综合高中
昆明综合高中
安徽开放大学|安徽开放大学报名,安徽开放大学报考,安徽开放大学,什么是安徽开放大学,安徽开放大学学历,安徽开放大学学费,安徽开放大学报名条件,安徽开放大学报名时间,安徽开放大学学历,安徽开放大学专业
安徽开放大学
安徽中源管业|安徽中源管业,安徽中源管业mpp电力管,安徽中源管业cpvc电力管,安徽中源管业pe穿线管,安徽中源管业电力管,安徽中源管业排水管,安徽中源管业通信管,安徽中源管业管材
安徽中源管业
易捷尔高职单招|易捷尔高职单招,易捷尔高职单招培训,单招分数线,单招录取分数线,高职单招学校分数线
易捷尔高职单招
弥勒综合高中|弥勒综合高中
弥勒综合高中
外贸网站建设|外贸网站建设,英文网站制作,英文网站设计,美国主机空间,外贸建站平台,多语言网站制作
外贸网站建设
卓越综合高中|卓越综合高中
卓越综合高中

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部