实例化多个对象会占用大量内存吗?

时间:2015-08-22 10:33:59

标签: php

我在php中使用OOP aproach。我只是在学习。每次我需要访问类中的方法时,我实例化一个对象。所以我在项目中创建了很多对象来完成每个任务。有一种方法我只能创建一个对象并在整个项目中共享为不同的任务做多种方法?

同样在我的班级中,我首先声明变量,然后像$this->property = $assign_variable一样使用它们。先前声明变量会消耗多少内存吗?

我只关心在OOP中实例化对象和声明类的正确有效方法。有人可以建议吗?

1 个答案:

答案 0 :(得分:2)

拥有一个对象的多个实例会消耗更多内存(很多是相对的),因为对象的每个属性都需要分配内存。如果你有一个对象消耗,比如x字节的内存用于它的属性,那么如果总共实例化n个对象,你将需要n * x个字节的内存(还有一个可忽略不计的内存量需要使用用于代码,但数量是不变的)。在正常使用中,这不应该是一个问题(即如果你没有不寻常的大量物体)。

如果您在整个计划中只需要一个班级的一个实例,我建议您使用Singleton设计模式 1]

以下是一个例子:

class Singleton {
    // This is where the one and only instance is stored
    private static $instance = null;

    private __construct() {
        // Private constructor so the class can't be initialized
    }

    // That's how you get the one and only instance
    public static function getInstance() {
        if (Singleton::$instance === null) {
            Singleton::$instance = new Singleton();
        }

        return Singleton::$instance;
    }

    public function doSomething() {
        // here you can do whatever you need to do with the one and only object of this class
    }
}

然后你可以非常方便地使用它:

Singleton::getInstance()->doSomething();

因此,您基本上只是将对象的地址存储在一个位置,即Singleton::$instance

另一种选择可能是使用静态方法。它在上面以单例模式定义:

class StaticExample {
    // ...

    public static function doSomething() {
        // your code
    }
}

可以使用StaticExample::doSomething();

访问

我还想注意,通常,您在项目中没有多少类来实现Singleton设计模式或经常使用static关键字。如果你想要使用很多单身或者看到自己需要很多static,你可能会出错,并且应该在Programmers Stack Exchange等其他网站上发布你的代码示例。

1] Singleton design pattern on Wikipedia