PHP静态变量内存使用情况

时间:2012-07-25 09:35:01

标签: php

我一直想知道静态变量在内存使用方面是如何工作的,是否真的应该考虑?

我知道静态变量只会耗尽一个内存区域,无论该类本身有多少个实例。所以在这个意义上,使用静态变量进行明智的内存消耗应该是明智的,对吧?但是,我从来没有偶然发现任何人谈论静态变量的内存使用情况(只有你可以用不同的实例共享数据)。

例如:

class Something () {
    static $DB = null;
    __construct ($DB) {
        $this->DB = $DB;
    }
}

如果我要创建这个类的10个实例,那么它会产生比非静态$ DB变量更少的内存使用量,对吗?

如果是这样,效果是如此之小,那真的不重要吗?

4 个答案:

答案 0 :(得分:3)

  

甚至应该真的考虑过吗?

不,你不应该因为这个原因而担心static

您必须担心使用static的原因是您无法对代码进行单元测试,并且您已将类和代码紧密耦合到Something::DB(即Something类)和你正在与全球国家合作。

另请查看我之前关于如何处理这些“全局”实例的答案:Which is the best practice to access config inside a function?

答案 1 :(得分:2)

在您的情况下,请重新考虑您的软件设计。在使用静态变量的情况下 - 您正在尝试(如果不是,那么为什么需要静态?)来从一个地方访问某些内容,而无需重新创建它,就像使用Singleton模式生成db对象的单个实例一样。

但是如果我们谈论内存使用,那么是的,如果你要创建更多的对象,那么你复制变量 - 它将需要更多的内存,但是关于它的静态或不是内存使用没有真正的变化。 / p>

答案 2 :(得分:1)

是的,类的静态属性将存储在单个内存实例中。

但是,在将变量作为静态做出决定时,这不是一个问题。它们用于类级别信息,例如保持类实例的计数。

关于何时使用静态变量,请阅读以下Stackoverflow文章:

答案 3 :(得分:0)

  1. 您应该使用

    自:: $ DB

  2. 访问静态变量(因为$this在类范围上下文中没有意义)

    1. 应该使用static来表示该类所有对象共享的内容。

    2. 您不应该使用构造函数中的参数来创建静态变量。这样做时,当您创建该类型的新对象时,静态变量会被覆盖