当类静态函数加载到内存中?

时间:2016-09-12 04:01:38

标签: php

我有一个这样的课。

<?php

namespace test;

class Test
{
    public static function static1(){}
    public static function static1(){}
    ...
}

自动加载使用psr-4。 什么时候内存中的静态函数加载?

  • 不使用时加载(包括)?我认为它不会这样做。
  • 使用test / Test(包括php文件)?
  • 调用Test.static1(); ?

在我的选项中:静态函数在没有new的情况下很容易使用(当然,它们没有私有数据),但我担心它会增加内存并降低性能。

1 个答案:

答案 0 :(得分:2)

免责声明:您所说/所说的内容对我来说并没有多大意义。您需要研究和更正您的术语,并了解有关静态方法或属性的更多信息。我相信当你提到私人数据时,你实际上指的是“实例属性”。

静态方法不会使用比实例方法更多的内存,也不确定在哪里提出这个想法。当包含时,编译器会将类的代码加载到内存中。除了它们的定义(编译代码),方法或函数不使用内存。运行方法时消耗的内存量完全取决于方法的作用。

方法没有私有属性,类具有私有属性,静态方法可以访问私有属性。

如果您的目标是在多个实例中保留属性,则可以从实例方法中访问静态属性:

public function getData() {
    // self::$data or static::$data represents a static property $data
    return self::$data;
}

如果您的目标是任何时候只存在一个类的实例,则可以查找Singleton模式。

如果有的话,静态方法和属性可以比实例对应物更有效。静态方法的一个问题是它们不太可测试,你可以自己研究为什么你可能想要避免静态方法,但性能不太可能是其中一个原因。