在一些开源代码上,为什么它们使用:
$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,每次调用都会创建一个新的对象实例。例如,这在数据库处理对象中很有用。您不希望程序中有多个对象实例(以及多个连接),而是希望所有程序中只有一个数据库处理程序和连接实例。