我需要使用PHP开发一个小型CMS,现在我正试图找出结构。
将使用一组功能生成CMS。像数据库函数,缓存,国际化和类似的东西。
我当时想这样做:
使函数非静态方法成为大型“站点”类的一部分;这样我可以运行该类的多个实例。不确定我是否需要这样做..
或使用静态方法将函数拆分为单独的类
这里的主要问题是CMS应该能够管理多个小型站点,而不仅仅是一个。所以要么我将所有方法设为静态并添加“站点切换”功能,要么将它们作为我根据我想要管理的站点实例化的普通对象
哪一个是最佳选择?
答案 0 :(得分:10)
静态方法通常是不好的做法。他们引入了很多潜在的问题。
1)他们引入了隐藏的依赖关系。任意调用foo :: bar()的代码依赖于foo,并且在没有定义foo的情况下无法运行。使用foo :: bar()的对象将正确构造,但如果未定义foo则无法使用。
2)静力学是全局的。全局状态非常糟糕,任何事情都可以改变代码,其状态未知。您通过使用静态方法牺牲了通过OOP封装实现的功能和控制。
3)将这些功能替换为不同的版本
是不可能的4)它使单元测试无法进行。
有关更多详细信息和代码示例,请参阅this article和this article
答案 1 :(得分:1)
我肯定建议使用静态类来完成这项工作。走这条路线将为你的所有函数创建一个伪命名空间,这样你就不必担心函数名称冲突等等,而且它还会阻止你调用你的一个helper类实例来调用你的一个辅助功能。