2011-07-28 15 views
0

我是一個在PHP中實現OOP的新手。對於PHP項目,我經常使用codeigniter框架。目前,我在爲自己的圖書館設計課程時面臨一個問題。 這裏是描述:在CodeIgniter或PHP中設計自己的庫

class ABC{ 
     function A(){ 

     } 
     function B(){ 

     } 
     function C(){ 

     } 
} 
class XYZ{ 
     function A(){ 

     } 
     function similarToB(){ 

     } 
     function X(){ 

     } 
} 

類ABC和XYZ有類似的特徵。功能A在兩個類之間共享。 ABC類的函數B類似於類XYZ(它們具有相同的名稱和參數,但實現方式不同)的函數similarToB功能C功能X完全不同。也可能有另一個類似的類。
什麼是設計這些類的最佳方式(例如使用繼承,接口等)?

+1

太抽象了;正確的答案取決於你實際建模的東西。 –

回答

1

我的建議:

class ancestor { 
    public function A() { } 
} 

interface BInterface { 
    public function B(); 
} 

class ABC extends ancestor implements BInterface { 
    public function B() { } 
    public function C() { } 
} 

class XYZ extends ancestor implements BInterface { 
    public function B() { } 
    public function X() { } 
} 

我知道每個人都會給你「這取決於」特殊才能(這確實取決於你想要做什麼),但我認爲這是你是什麼尋找。

+0

感謝您爲我提供一個選項。我認爲這可以爲我工作。 –

0

您可以將其編碼爲單個類,將其保存爲兩個類,甚至將其編碼爲八個單獨的類。也許你可以放一個基類,然後有兩個擴展基類的類。

哪一個最好取決於你想要做什麼。

從本質上講,大多數編程是真正建立一個真實世界過程的抽象模型,它本身可能是真實的或抽象的。最好的設計是最能反映真實世界過程的設計。

所以,如果你試圖實現一個「郵購」和「直銷」,這兩個都是銷售變化,我會推薦一個基類「銷售」類,其中包含類「mail_order」和「direct_order」擴展基類。

相反,如果你試圖實施一個「郵購」和「郵件廣告」,這是分開的業務流程,恰好使用郵政系統,我會保持這些類完全分開。