我目前正在創建一個抽象類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多個文件,並有工廠拉起來,並在填補他們。
感謝,多米尼克
好的,謝謝......只是看着Zandstra的PHP OOP書,他似乎只是有一個像class {{} class Plains {}類的EarthPlains擴展Plains {}等類定義的類的列表。所以我猜他們是那裏如果你需要添加額外的方法,並沒有辦法沒有文件。在調用該對象時,工廠潛入數據庫並獲取屬性...謝謝:) –
這些示例在OOP書籍中給出,以提供簡化示例。相反,我建議你在開始OOP編程之前先學習OOAD。這有很大幫助。 – hakre
嗯好好考慮一下我不認爲我實際上需要將所有這些建築物定義爲空物體。我想,如果我是創造克隆原始建築對象,並使用屬性填充它,然後而不是一個工廠對象'如果typeof運算($類)==「CoffeeShop''我能代替有'如果$類 - >名稱= 'CoffeeShop',然後再添加類,如果需要任何附加的獨特功能與工廠克隆作爲例外之一,如果需要。我還需要完成真正讀完這本書:d –