什么时候在PHP中使用静态修饰符

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

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

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

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

最近我做了一些代码评论,我遇到了一些有很多静态方法的类,我似乎无法理解为什么

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

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

静态方法用于

  • 与给定类的整个对象集合相关的函数(如单例模式 )
  • 函数与任何东西都没有关系,但由于OO必须放在类中(例如实用程序类)

最好的做法是尽可能避免使用它们,因为它们会降低可testing性和可维护性。 两个伟大的解读:

  • 静态认为有害
  • 静态方法是对可testing性的死亡

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

静态方法不需要一个实例(可以返回一个实例),除了放在类的名称空间中(因此避免与其他函数的冲突),它们或多或less像全局函数,并且可以访问类的私有成员。

所以,只要你对函数的这些属性感兴趣就使用它。

没有什么PHP具体使用静态方法。

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

所以它们主要用于与类function相关的方法,但不需要现有的实例用于其他代码。

一个常见的例子是一个自定义的比较方法,可以传递给,例如,uasort()函数来sorting类的types的对象的数组。

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

您不需要创build类的实例来使用其静态方法。