代码之家  ›  专栏  ›  技术社区  ›  Alex N.

在PHP中何时使用静态修饰符

  •  35
  • Alex N.  · 技术社区  · 16 年前

    最近做了一些代码检查,我遇到了许多类,其中有大量的静态方法…我似乎不明白为什么?因此我的问题是:

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

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

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

    7 回复  |  直到 13 年前
        1
  •  23
  •   Imran    16 年前

    最近做了一些代码检查,我遇到了许多类,其中有大量的静态方法…我似乎不明白为什么

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

    通常,它们用于在单个对象中不太有用的函数,但在类级别上有一些用途(如其他答案中所述)。

        2
  •  6
  •   Russell Davis    13 年前

    最佳实践是尽可能避免使用它们,因为它们会破坏可测试性和可维护性。两篇伟大的文章详细阐述了:

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

        3
  •  5
  •   Zed    16 年前

    静态方法用于

    • 与给定类的整个对象集合相关的函数(例如 singleton pattern )
    • 与任何事物无关但由于OO(例如实用程序类)而必须放在类下的函数。
        4
  •  4
  •   Michael Krelin - hacker    16 年前

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

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

        5
  •  3
  •   Henrik Opel    16 年前

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

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

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

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

        6
  •  2
  •   Jquest    13 年前

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

        7
  •  1
  •   Havenard    16 年前

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

    推荐文章