2011-11-20 93 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的實現。

相關問題