我有这个Config
- 我在我的PHP5应用程序中用来加载&解析我的静态配置。到目前为止,我已经设法使类不再是单例/注册表,而是在依赖注入的帮助下将Config
类的实例传递到所需的任何地方。
但是现在因为我需要在运行时在一个地方设置/更改我的Config
,我的更改不会全局反映,并且远离使用static
修饰符的专家在PHP中,我需要问:
确保对Config
- 类中的属性所做的更改反映在整个应用程序中而不将该类变为单例的最佳方法是什么?我可以让变量保存配置数据static
吗?
答案 0 :(得分:2)
到目前为止,我已经成功地将类保持为单例/注册表,而是在依赖注入的帮助下将Config类的实例传递到所需的任何位置。
如果您将Config
课程的同一实例传递到应用程序的每个部分,并且您更改了设置,则应该反映在其他任何位置。
如果您要创建该类的多个对象(并且每次都解析该配置文件?!),您可能希望停止这样做。这可能是浪费,我说它很混乱。
所以,如果你create only one
并且通过它,一切都应该没问题。
假设您创建了只应存在一次的对象的多个实例:
如果您能够“修复”您的架构以允许您这样做:请执行此操作。
如果您不能......那么......创建静态属性以将您的值保存在可以多个实例关闭的类中,至少在我的书中,主要wtf因子。如果你无法修复(意味着这样做很麻烦)只是以预期的方式“打破”它,以便其他人不会绊倒它。
我宁愿拥有一个单身人士,也不会创造单身人士的所有问题,而也就是成为全局变量的包装者。
答案 1 :(得分:1)
盲目地避免设计模式,因为你在互联网论坛上听说他们的坏是与单身人士一样多的反模式。如果一个工具适合工作,那就是正确的。
看看你的问题,你正试图通过一个复杂的多更新系统来模仿单身人士为了上帝的缘故...而且你知道,让一个班级静止实际上是把它变成了单身人士,虽然是一个不安全的人,可以在任何时候被覆盖。
TL; DR:自己思考并使用正确的工具;使您的配置类成为单身。