2

在一些开源代码上,他们为什么使用:

$router = Cfw_Router::getInstance();

而不是仅仅使用

$rounter = new Cfw_Router();

它有优点吗?


getInstance()

public static function getInstance() {
    if (null === self::$__instance) {
        self::$__instance = new self();
    }
    return self::$__instance;
}
4

3 回答 3

4

第一次使用称为 a singleton。它确保只存在一个对象实例。

于 2012-04-17T21:14:05.067 回答
4

他们正在使用单例模式。基本上,它只允许在任何给定时间存在一个实例。然而,它有时可以用来提供一个全局变量,这在设计中并不总是最好的(参见上面链接中的批评)。

于 2012-04-17T21:14:07.093 回答
2

This is because the singleton pattern. With getInstance, only 1 instance of the object will be created in the whole program, while with new, a new object instance is created in each call. That can be useful for example in a database handling object. You don't want to have multiple object instances in your program (and multiple connections) but instead you want only one instance of database handler and connection across all your program.

于 2012-04-17T21:16:57.760 回答