我为我的项目创建了一个注册表模式,可以实例化或获取对任何对象的现有引用。
但是,现在我发现自己必须将$registry
传递给项目中的几乎所有函数和构造函数,因为它们中的大多数都需要自己实例化其他类。这本身并不是很糟糕,这就是注册表应该做的事情,但是我希望保持我的功能更纯粹,只需要它独有的参数
我可以将类扩展到具有$registry
对象的父级,但由于我们正在处理PHP而你只能扩展一个类,所以这不是一个很好的解决方案。
以下是一个更好地说明它的例子。
Class controller {
__construct($registry,other parameters) { check conditions; addView($registry); }
addView( viewObject($registry);
}
任何保持设计更优雅的想法,而不是一直传递$registry
?
答案 0 :(得分:0)
我决定为我的项目使用$ GLOBALS ['registry']。
这是唯一使用和允许使用的全局。虽然全局变得不受欢迎,因为它可以引入错误并使代码更难维护,但是你需要99%的函数上的注册表使项目保持干净,不会将注册表传递给所有函数,而且它是唯一的全球性大大降低了滥用的风险。