2011-11-17 65 views
0

我目前正在創建一個抽象類Building。然後,我想使用多個不同類型的Building來使用數據庫中的屬性繼承此摘要。抽象類,然後使用數據庫中的屬性創建繼承此屬性的對象

具有繼承我通常會碰到這樣的:

abstract class Building { 
    protected 
     $id, 
     $name, 
     $cost; 

    public function getName() { // return name } 

} 
class CoffeeShop inherits Building { 
    protected $id = 2, $name = 'Coffee Shop', $cost = '£15'; 
    public function sellCoffee() { // sell it } 
} 
class ConferenceCentre inherits Building { 
    protected $id = 2, $name = 'Conference Centre', $cost = '£10'; 
    public function bookRoom() { // book it } 
} 

漂亮的標準,一個標準的藍圖建築類,定義什麼人要繼承和申報。 比方說,有over 100 different building types ......他們中的一些是相當標準,但他們所有的屬性都在database定義,允許管理員去和改變它的name, costs, requirements等,以及一些人可能不需要定義任何特殊功能,但定義未來需要的功能將會很酷。

是否有可能進入數據庫並用它的屬性和類型填充/創建一個對象,而不必先定義實際的文件?如果我真的要創建該文件,那麼這是手動工作,並且我與文件系統綁定,而不是存儲在數據庫中的實際建築物。

然後,我可以做喜歡的事:

abstract class Building { // blah } 

// Loop through DB to create objects that inherit the building class (factory?) 
$building = new BuildingFactory('CoffeeShop'); 

// Random function that hints of the type (despite class file not existing) 
public function (CoffeeShop $cs) { // Do stuff } 

// Random test of type 
if (gettype($building) == 'CoffeeShop') { // Do stuff } 

我想這個問題是...有什麼辦法可以不必創建實際的文件創建類。我猜測能夠檢查該文件是否真實存在,並在需要時添加自定義函數。

否則,我要創造100多個文件,並有工廠拉起來,並在填補他們。

感謝,多米尼克

回答

3

無需編寫的定義不能定義一個類。對於任何計算機語言來說都是如此,對於PHP也是如此。

您可以將代碼放入數據庫中,也可以根據您從數據庫中獲取的數據生成代碼。

但是,無論何時您接近eval(這將用於這些),如果在創建設計時詢問正確的問題,最常見的情況是更有價值。

它看起來更多的是我一直都有同一個對象,但它只有一些不同的數據。

而且我不確定這些對象必須具有多少個不同的函數。您尚未共享有關應用程序的一般結構和底層域邏輯的許多信息,因此很難在第一個答案中分辨出來。

+0

好的,謝謝......只是看着Zandstra的PHP OOP書,他似乎只是有一個像class {{} class Plains {}類的EarthPlains擴展Plains {}等類定義的類的列表。所以我猜他們是那裏如果你需要添加額外的方法,並沒有辦法沒有文件。在調用該對象時,工廠潛入數據庫並獲取屬性...謝謝:) –

+0

這些示例在OOP書籍中給出,以提供簡化示例。相反,我建議你在開始OOP編程之前先學習OOAD。這有很大幫助。 – hakre

+0

嗯好好考慮一下我不認爲我實際上需要將所有這些建築物定義爲空物體。我想,如果我是創造克隆原始建築對象,並使用屬性填充它,然後而不是一個工廠對象'如果typeof運算($類)==「CoffeeShop''我能代替有'如果$類 - >名稱= 'CoffeeShop',然後再添加類,如果需要任何附加的獨特功能與工廠克隆作爲例外之一,如果需要。我還需要完成真正讀完這本書:d –