【发布时间】:2014-06-21 10:35:25
【问题描述】:
我有一个类,当我实例化它时,它会通过构造填充属性。 此类的目标是描述一家商店,因此他的属性将受到保护,因为它们仅属于该类。
但问题是有时我需要从属性中获取有关该类的一些信息。
示例:
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 类上(通过工厂实例化),需要获取商店属性才能使用。
有很多方法可以完成这项工作,但在我看来,所有解决方案都有些混乱。我尝试了这种方式:
设置 getter 和 setter - 要排除这种方式,拥有 20 个属性,我需要 40 个方法。脚本效率不高。
使用
__get()魔术方法,我的 IDE 抱怨通过魔术方法获取这些属性。这甚至是真的,因为此时我可以将其设为公开。使用反射,似乎是上述方法中最好的,但仍然需要太多的实现才能只获取属性(我猜)
所以我想实现最好的设计来完成这项工作,拥有一个具有受保护属性但同时可以以优雅方式调用的类。
是否有任何设计模式有助于实现这一目标?
我可能已经在 stackOverflow 上问过类似的问题,但我审查了这个问题并以更好的方式提出了建议。
【问题讨论】:
标签: php properties