首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在接口类中实现函数是可能的吗?

在接口类中实现函数是可能的吗?
EN

Stack Overflow用户
提问于 2011-11-21 00:05:53
回答 2查看 147关注 0票数 2

什么是实现函数?通常,我所知道的是实现一个接口,该接口具有

代码语言:javascript
运行
复制
function foo(); 

和实现like

代码语言:javascript
运行
复制
function foo($bar)

在另一个班级

但是当我在接口中实现函数时会发生什么呢?我必须在子类中重新实现它们吗?或者我可以直接在子类中使用它们,假设它们是在子类中实现的。

代码语言:javascript
运行
复制
interface ibarbar{
function foo($bar)
{ 
 return $bar.$bar;}
}

class barbar implements ibarbar
{
 function baz()
 {
 $this->barbar(); //used without implementing in subclass. expected results unknown.
 }
}

PHP文档说

代码语言:javascript
运行
复制
// This will not work
// 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;
    }
}

因此,接口中的所有方法都是抽象方法。但是我找不到如何扩展一个函数。或者实现一个函数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-21 00:08:07

你不能在一个接口中实现一个函数。您只能指定其签名。

如果您希望为某些方法指定签名,但为其他方法提供实现,请使用抽象类:

代码语言:javascript
运行
复制
abstract class A {
    abstract public function B($c);

    public function C($d) {
        // do something
    }
}
class B extends A {
    public function B($c) { // need to implement B, as it is abstract
        $this->C($c);       // but can directly use C, as it is not
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-11-21 00:08:57

根据定义,接口没有实现。这里你说的是继承,如果你有一个在另一个类中重写/ Shadow的实现的函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8202784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档