2011-11-20 36 views
2

什么是实现一个功能?通常情况下,我所知道的是实现具有是否正在接口类中实现一个函数?

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

所以在接口中的所有方法都是抽象的方法。但我找不到如何扩展一个函数。或实现功能

+1

我认为接口的一点是你没有实现...如果你想在子类中使用函数,你不需要一个“父”类吗? – Matthew

+1

我相信当你这样做的时候,这是一个[抽象类](http://php.net/manual/en/language.oop5.abstract.php)。 –

回答

1

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


如果要指定一些方法签名,但为他人提供实施,使用抽象类:

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

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

相关问题