何时在PHP中使用static修饰符

时间:2009-08-22 19:21:58

标签: php oop static

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

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

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

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

7 个答案:

答案 0 :(得分:23)

  

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

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:5)

静态方法用于

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

答案 3 :(得分:4)

静态方法不需要实例(并且可以返回一个实例)并且或多或少类似于全局函数,除非它被放在类的命名空间中(因此避免与其他函数冲突)并且可以访问类'私人成员。

因此,只要您对函数的这些属性感兴趣,就可以使用它。

答案 4 :(得分:3)

没有PHP特定的静态方法的使用。

可以直接在类上调用静态方法 - 不需要实例化对象。

因此,它们主要用于与类功能相关的方法,但不需要将现有实例用于其他代码。

一个常见的例子是自定义比较方法,可以传递给uasort()函数,以对类类型的对象数组进行排序。

答案 5 :(得分:2)

您可以使用静态方法获得更好的性能。 您不需要为使用Web App的每个用户创建对象,并且使用多种方法和属性创建对象的速度较慢,需要更多的系统资源。

答案 6 :(得分:1)

您无需创建类的实例即可使用其静态方法。