PHP静态变量内存使用情况


PHP static variables memory usage

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

我知道静态变量只会占用一个内存区域,而不管类本身有多少实例。因此,从这个意义上说,使用静态变量进行明智的内存消耗也是明智的,对吧?但我从未偶然发现有人在谈论静态变量的内存使用(只是你可以与不同的实例共享数据)。

例如:

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

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

如果是这样,效果那么小吗?

这真的应该考虑吗?

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

您必须担心使用static的原因是,您无法再对代码进行单元测试,并且您有与Something::DB(即Something类)紧密耦合的类和代码,并且您正在使用全局状态。

还可以看看我之前关于如何处理这些"全局"实例的回答:访问函数内部配置的最佳做法是什么?

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

但是,如果我们谈论的是内存使用,那么是的,如果你要创建更多的对象,那么你要复制变量——这将占用更多的内存,但内存使用的静态与否并没有真正的变化。

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

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

浏览以下关于何时使用静态变量的Stackoverflow帖子:

  • 我什么时候在php中使用静态变量/函数
  1. 你应该使用

    self::$DB

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

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

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

相关文章: