静态方法与否?

ell*_*uty 1 php class

我需要使用PHP开发一个小型CMS,现在我正试图弄清楚结构.

CMS将使用一组函数生成.像数据库函数,缓存,国际化和类似的东西.

我当时想这样做:

  • 使函数非静态方法成为大型"站点"类的一部分; 这样我可以运行该类的多个实例.不确定我是否需要这样做..

  • 或者使用静态方法将函数拆分为单独的类

这里的主要问题是CMS应该能够管理多个小站点,而不仅仅是一个.所以要么我将所有方法都设置为静态并添加"站点切换"功能,要么使它们成为我根据我想要管理的站点实例化的普通对象

哪一个是最好的选择?

Tom*_*m B 10

静态方法通常是不好的做法.他们引入了很多潜在的问题.

1)它们引入了隐藏的依赖关系.任意调用foo :: bar()的代码依赖于foo,并且在没有定义foo的情况下无法运行.使用foo :: bar()的对象将正确构造,但如果未定义foo,则无法使用.

2)静力学是全局的.全局状态非常糟糕,任何事情都可以改变代码,其状态未知.您通过使用静态方法牺牲了通过OOP封装实现的功能和控制.

3)不可能将功能替换为不同的版本

4)它使单元测试变得不可能.

有关更多详细信息和代码示例,请参阅本文本文