我有一个类,当我实例化它时通过构造填充属性。 这个类的目标是描述一个商店,所以他的属性将受到保护,因为它们只属于那个类。
但问题是有时我需要从属性中获取有关该类的一些信息。
示例:
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和setter - 要以这种方式排除,有20个属性我需要40个方法。脚本效率不高。
使用__get()
魔术方法,我的IDE抱怨通过魔法获取这些属性。这甚至是正确的,因为在这一点上我可以公开它。
使用反射,它似乎是上述方法中最好的,但仍然需要太多的实现只获得属性(我猜)
所以我希望获得最好的设计来完成这项工作,拥有一个具有受保护属性但同时以优雅方式调用的类。
有任何设计模式可以帮助实现这一目标吗?
我可能已经在stackOverflow上问了类似的东西,但我回顾了这个问题并以更好的方式提出了建议。
答案 0 :(得分:2)
您可以使用__get()
标记定义可在您的类docblock中通过__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以获取参考和示例