2014-06-21 29 views
1

我有一個類,當我實例化它通過構造填充屬性。 這個類的目標是描述一個商店,所以他的屬性將被保護,因爲他們只屬於那個類。當他們不公開//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上有類似的東西,但我回顧了問題,並提出了一個更好的方法。

回答

2
+0

由於它的工作可見類的docblock __get()__set()定義訪問屬性的列表,所以你認爲最好的方法是用'__get()'魔法來保存這個類? – Fabrizio

+0

我沒有看到任何個人獲得者和接球者的問題;但是如果你有20個getter和setter屬性,你可能已經達到了需要分解你的類的地步......除了ORM和類似的數據庫結構的屬性依賴於數字的數據庫表中的列(並傾向於使用__get()和__set()無論如何,你通常不應該有任何一個類中的許多屬性 –

+0

好的謝謝你的答案已經有幫助,但我想保持這個問題打開一下,無論如何,閱讀這篇文章https://developers.google.com/speed/articles/optimizing-php讓我遠離使用getters和setters – Fabrizio

相關問題