静态方法与否?

时间:2012-03-05 01:07:06

标签: php class

我需要使用PHP开发一个小型CMS,现在我正试图找出结构。

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

我当时想这样做:

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

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

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

哪一个是最佳选择?

2 个答案:

答案 0 :(得分:10)

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

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

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

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

是不可能的

4)它使单元测试无法进行。

有关更多详细信息和代码示例,请参阅this articlethis article

答案 1 :(得分:1)

我肯定建议使用静态类来完成这项工作。走这条路线将为你的所有函数创建一个伪命名空间,这样你就不必担心函数名称冲突等等,而且它还会阻止你调用你的一个helper类实例来调用你的一个辅助功能。