获取属性的最佳方式,当他们不是公共/ PHP


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和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

相关文章: