2013-09-29 40 views
2

讓我們說你有一個類如何記錄一個實現多個接口的類?

class View implements ViewInterface, TemplateInterface { 

    private $template; 

    public function setTemplate($template) { 
     $this->template = $template; 
     return $this; 
    } 
} 

當你再記錄了TemplateInterface和你來setTemplate($template)方法你怎麼放下作爲它的返回類型?

如果我把View作爲返回類型,然後我後來有不同的類實現TemplateInterface這是不是類型View我的API文檔將是錯誤的。

您是否放下返回類型View,ViewInterface,TemplateInterface或它們的混合物?

namespace Views\Interfaces; 

interface TemplateInterface { 

    /* --------------------------------- */ 
     public function getTemplate(); 
    /* --------------------------------- 
    * @args: void 
    * 
    * @return: String - The name of the template. 
    */ 

    /* ------------------------------------------ */ 
     public function setTemplate($template); 
    /* ------------------------------------------ 
    * @arg 1: (String $template) - The name of the template file. 
    * 
    * @return: Not sure yet!!! 
    */ 

} 
+0

顯示的'TemplateInterface'代碼 – haim770

回答

2

的接口應該是這樣的:

interface TemplateInterface 
{ 
    /** 
    * @return TemplateInterface 
    */ 
    public function setTemplate($template); 
} 

和視圖類:

class View implements ViewInterface, TemplateInterface { 

    private $template; 

    /** 
     * @return TemplateInterface 
     * or (maybe better) 
     * @return View (as it implements TemplateInterface and is more specialized) 
     */ 
    public function setTemplate($template) { 
     $this->template = $template; 
     return $this; 
    } 
} 
+0

是啊,我在想,但是當你注入對象到一個方法和該對象實現一個接口,你把接口的名稱作爲該方法簽名中的對象的類型提示,所以我只是有這種感覺返回類型爲什麼它會c更改並說對象類型而不是對象正在實現的接口。 – ibanore

+0

'TemplateInterface :: setTemplate()'的返回類型是什麼? – hek2mgl

+0

它返回'View'的一個實例。問題是,在我的API文檔中,我放了'@return:View',然後我有一個實現'TemplateInterface'的不同類,它不會是'View'類型,所以API將會是謊言。 – ibanore

相關問題