2017-10-20 40 views
0
class A 
{ 
    public function method1() {} 
    public function method2() {} 
} 

class B 
{ 
    public function method1() {} 
    public function method3() {} 
} 

class Factory 
{ 
    public static function create($className) 
    { 
     return new $className(); 
    } 
} 

,現在當我嘗試使用它:Php,工廠方法的代碼完成?

Factory::create('A')-> 
Factory::create('B')-> 

井不會枚舉任何方法,我不能添加此時,相應的PHPDoc的。 科西嘉我可以隨時把它包裝:

/** 
* @return A 
*/ 
public static function createA() 
{ 
    return new A(); 
} 

但那不是100%滿意的,特別是當我有一大堆的這些。

+0

我認爲你需要向我們解釋你正在努力實現什麼 –

+1

但問題是什麼? –

+0

完成。 「10更多去...」 –

回答

1

如果工廠可以返回不同類的實例,那麼所有這些類都應該實現一個通用接口。在這種情況下,你不應該關心實際的類,而是使用這個接口。

如果創建的對象應該有不同的方法(不能被通用接口覆蓋),那麼明顯的工廠應該爲每種類型的對象(或甚至單獨的工廠)提供單獨的方法。

如果你真的需要方法與不同類型的返回值,如果類型安全是無關緊要的,你只是想IDE自動完成,則只需添加一個doc-comment with multiple types像以下(PHPStorm和NetBeans支持這種表示法):

/** 
* … 
* 
* @return A|B|C 
*/