在不公开/ PHP时获取属性的最佳方法

时间:2014-06-21 10:35:26

标签: php properties

我有一个类,当我实例化它时通过构造填充属性。 这个类的目标是描述一个商店,所以他的属性将受到保护,因为它们只属于那个类。

但问题是有时我需要从属性中获取有关该类的一些信息。

示例:

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上问了类似的东西,但我回顾了这个问题并以更好的方式提出了建议。

1 个答案:

答案 0 :(得分:2)

您可以使用__get()标记定义可在您的类docblock中通过__set()@property访问的属性列表,这些标记应使其对IDE可见

请参阅http://www.phpdoc.org/docs/latest/for-users/phpdoc/tags/property.htmlhttp://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.property.pkg.html以获取参考和示例