何时在PHP中使用static修饰符

Ale*_* N. 35 php oop static

最近做了一些代码评论,我遇到了许多具有大量静态方法的类......我似乎无法理解为什么?因此我的问题是:

在PHP中使用静态方法的最佳实践是什么?

什么时候想要使用它们什么时候不应该使用它们?

运行时处理静态方法的具体区别是什么?它们会影响性能还是内存占用?

Imr*_*ran 23

最近我做了一些代码审查,我遇到了许多具有大量静态方法的类......我似乎无法理解为什么

PHP在5.3之前没有名称空间,因此所有函数/变量都在全局范围内,除非它们属于某个类.将它们作为静态成员放在一个类中是一种没有命名空间的解决方法(这可能就是为什么你在"重要"数字中看到它们的原因)

通常,它们用于在单个对象中没有多大用处的函数,但在类级别有一些用处(如其他答案中所述)

  • 在类中组织相关函数作为静态也可以探索PHP的强大功能:按需自动加载类的功能.如果允许您编写代码而不必担心执行正确的包含,并且不需要包含您可能并不总是使用的内容.你只需要调用静态方法,`__ autoload()`就可以了.清洁,优化和功能编码.甚至名称空间也没有. (2认同)

Rus*_*vis 7

最佳做法是尽可能避免使用它们,因为它们会破坏可测试性和可维护性.精心制作的两篇精彩内容:

澄清:在这个问题上似乎存在很多误解.缺乏依赖注入是真正的问题.直接调用静态方法恰好是陷入陷阱的最常见方式之一.

  • 我以前见过这些论点,但它们并不引人注目.使静态方法可测试的方法是没有副作用; 这些方法是最可测试的; 你给他们一个输入,他们返回一个输出,就是这样.对类参数的强烈依赖也没有任何重要性; 将相关的静态方法分组在一个类中就是重点. (3认同)
  • 同意。仔细观察该代码,可以轻松地将“this.hasher”设置为静态哈希函数,这也同样可以解决可测试性问题。 (2认同)

Zed*_*Zed 5

静态方法用于

  • 与给定类的整个对象集合相关的函数(例如,单例模式)
  • 与任何事物无关的函数,但由于OO(例如实用程序类)必须放在类下