我有一个类,当我实例化它通过构造填充属性。这个类的目标是描述一个商店,所以他的属性将受到保护,因为它们只属于这个类。
但问题是,有时我需要从属性中获取该类的一些信息。
例子:
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抱怨通过魔术方法获得这些属性。因为现在我可以把它设为public使用反射,它似乎是上述方法中最好的,但仍然需要太多的实现只获得属性(我猜)
所以我想实现最好的设计来得到这项工作,有一个类,有保护的属性,但同时在一个优雅的方式可调用。
有什么设计模式可以帮助实现这个目标吗?我可能已经在stackOverflow上问过类似的问题,但我回顾了这个问题并提出了更好的方法。
你可以在你的类docblock中使用@property
标签定义一个可以通过__get()
和__set()
访问的属性列表,这应该使它们对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