我在php中使用OOP方法。不过我还在学习。每次需要访问类中的方法时,我都会实例化一个对象。所以我在我的项目中创建了相当多的对象来完成每个任务。是否有一种方法,我只能在整个项目中创建一个对象和共享,为不同的任务做多种方法?
同样在我的类中,我先声明变量,然后像$this->property = $assign_variable
一样使用它们。更早声明变量会消耗内存吗?
我只是关心如何在OOP中正确有效地实例化对象和声明类。有人能给点建议吗?
拥有一个对象的多个实例会消耗更多的内存(much是相对的),因为对象的每个属性都需要分配内存。如果你有一个对象为它的属性消耗了x字节的内存,那么如果你总共实例化n个对象,你将需要n*x字节的内存(还有一个可以忽略不计的内存量需要用于代码,但这个量是恒定的)。在正常使用中,这应该不是一个问题(例如,如果你没有异常大量的对象)。
如果你在整个程序中只需要一个类的实例,我建议你使用单例设计模式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();
我还想指出,通常情况下,在实现单例设计模式或经常使用static
关键字的项目中,您不会有太多的类。如果你想使用大量的单例,或者看到自己需要大量的static
,你可能犯了一些错误,应该在另一个网站上发布你的代码示例,如程序员堆栈交换。
1]维基百科的单例设计模式