另一位開發人員和我正在構建網站的過程中,我們實現了我們自己的OOP模型,我們進行了很多討論,但似乎我遇到了一堵磚牆。 請多多包涵OOP繼承
我們所有的類擴展對象,它有一個構造函數,它使用get_called_class()
獲取類,然後get_class_vars()等加載列名,這意味着我們可以有一個save
,delete
, displayExisting
,getAll
,以及默認情況下類中的其他幾個方法,這消除了很多代碼。這很好。現在,我有一個類InboundData
,這有3個班擴展超出自身,稱爲Visit
,Enquiry
和BrochureRequest
,他們有一個「inbound_data_id」,然後InboundData有一個重載的構造看起來像這樣:
function __construct($id = '')
{
$this->className = get_called_class();
$this->id = (int)$id;
$this->tableName = strtolower($this->className);
$this->setDbFields();
$this->loadData();
$this->contact = new Contact($this->contact_id);
$this->address = new Address($this->address_id);
$this->domain = new Domain($this->domain_id);
$this->park = new Park($this->park_id);
}
問題是,contact
,address
,domain
和park
都是受保護的,以阻止Object的方法將它們作爲列名/類變量進行拾取。這是我們對所有非分貝成員所採用的方法,如:
protected $contact;
protected $address;
protected $domain;
protected $park;
我們沒有遇到任何問題,直到寫前端代碼中,我發現,我顯然不能填$formObj->contact->var
等,更不用說我沒有寫入任何保存代碼的入站數據擴展對象,這將需要保存所有附加的表。
請OOP大師讓我們知道我們出錯的地方,以及完成這個的最好方法是什麼。隨意提出任何問題,我知道這聽起來應該讓人感到困惑。
你有沒有嘗試寫一個getter? '函數get($ field){return $ this - > $ field; }'並使用'get(「contact」)'提取聯繫人 – 2012-02-14 15:04:45
順便說一句,'get_called_class'是多餘的,因爲'__CLASS__'魔術常數的行爲起始於PHP 5 – rdlowrey 2012-02-14 15:33:08
@rdlowrey謝謝,將來會使用Eugen什麼即時使用現在,但它並沒有幫助保存:(此擴展業務已經搞砸了我:/ – 2012-02-14 15:37:36