是否可能在接口类中实现函数


Is implementing a function in an interface class possible?

什么是实现函数?通常,我所知道的是实现一个带有

的接口
function foo(); 

和实现类似

function foo($bar)

在另一个类

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

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文档说

// 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;
    }
}

表示接口中的所有方法都是抽象方法。但我不知道如何扩展一个函数。或者实现一个函数

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


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

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
    }
}

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