我有一個類,當我實例化它通過構造填充屬性。 這個類的目標是描述一個商店,所以他的屬性將被保護,因爲他們只屬於那個類。當他們不公開//PHP
但問題是,有時我需要從屬性中獲取關於該類的一些信息。
例如:
class Shop {
protected $name;
protected $typology;
protected $owners;
protected $closed;
public function __construct($name,$typology,$owners,$closed)
{
$this->name = $name;
$this->typology = $typology;
$this->owners = $owners;
$this->close = $closed;
}
}
$shop = new Shop("Name Shop","vegetarian",2,1);
$superMarket = SupermarketFactory::getInstance($shop);
在類Supermaket
是(通過工廠實例化),需要得到店性質的工作。
有很多方法可以使這項工作,但所有的解決方案對我的觀點有點混亂。我試驗過這種方式:
設置獲取者和設置者 - 要排除這種方式,有20個屬性我需要40個方法。腳本效率不高。
使用
__get()
魔法,我的IDE抱怨通過魔法獲取這些屬性。這是真的,因爲在這一點上我可以公開它。使用反射,這似乎是最好的以上幾種方式,但仍需要太多的實施得到的只是屬性(我猜)
所以我想達到最佳的設計得到這項工作,有一個保護財產,但同時可以優雅地調用的類。
有什麼設計模式可以幫助實現這個目標?
我可能已經問stackoverflow上有類似的東西,但我回顧了問題,並提出了一個更好的方法。
由於它的工作可見類的docblock
__get()
和__set()
定義訪問屬性的列表,所以你認爲最好的方法是用'__get()'魔法來保存這個類? – Fabrizio我沒有看到任何個人獲得者和接球者的問題;但是如果你有20個getter和setter屬性,你可能已經達到了需要分解你的類的地步......除了ORM和類似的數據庫結構的屬性依賴於數字的數據庫表中的列(並傾向於使用__get()和__set()無論如何,你通常不應該有任何一個類中的許多屬性 –
好的謝謝你的答案已經有幫助,但我想保持這個問題打開一下,無論如何,閱讀這篇文章https://developers.google.com/speed/articles/optimizing-php讓我遠離使用getters和setters – Fabrizio