![](/img/trans.png)
[英]What is the best way to look inside a PHP class instance (object) to see all of its available public properties and methods?
[英]Best way to get Properties when they are not public / 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
類(通過Factory實例化)上,需要獲取商店屬性才能使用。
有很多方法可以使這項工作完成,但是所有解決方案在我看來都是有點混亂。 我嘗試了這種方式:
設置getter和setters-若要排除這種方式,要擁有20個屬性,我需要40個方法。 腳本效率不高。
使用__get()
魔術方法,我的IDE抱怨通過魔術方法獲取那些屬性。 甚至是正確的,因為在這一點上我可以將其設置為公開。
使用反射,這似乎是上述方法中最好的,但是仍然需要太多實現才能僅獲取屬性(我猜)
因此,我想獲得最好的設計來完成這項工作,擁有一個具有受保護屬性但同時又可以優雅地調用的類。
有什么設計模式可以幫助實現這一目標?
我可能已經在stackOverflow上問過類似的問題,但是我復查了問題並提出了更好的建議。
您可以使用__get()
定義類docblock中可通過__get()
和__set()
訪問的屬性列表,該@property
應使它們對IDE可見。
參見http://www.phpdoc.org/docs/latest/for-users/phpdoc/tags/property.html和http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.property.pkg.html供參考和示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.