新关键字与创建实例


new keyword vs creating instances

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

$router = Cfw_Router::getInstance();

而不是仅仅使用

$rounter = new Cfw_Router();

它有优势吗?


getInstance()

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

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

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

这是因为单例模式。使用 getInstance,整个程序中只会创建对象的 1 个实例,而使用 new,每次调用都会创建一个新的对象实例。例如,这在数据库处理对象中很有用。您不希望程序中有多个对象实例(以及多个连接),而是希望所有程序中只有一个数据库处理程序和连接实例。