在一些开源代码中,他们为什么要使用:
$router = Cfw_Router::getInstance();
而不仅仅是使用
$rounter = new Cfw_Router();
它有优势吗?
getInstance()
:
public static function getInstance() {
if (null === self::$__instance) {
self::$__instance = new self();
}
return self::$__instance;
}
答案 0 :(得分:4)
第一次使用称为singleton
。它确保只存在一个对象实例。
答案 1 :(得分:4)
他们正在使用singleton pattern。基本上,它允许在任何给定时间只存在一个实例。但是,它有时可以用来提供一个全局变量,这在设计中并不总是最好的(参见上面链接中的批评)。
答案 2 :(得分:2)
这是因为单身模式。使用getInstance,在整个程序中只会创建一个对象实例,而在new中,每次调用都会创建一个新的对象实例。 例如,在数据库处理对象中,这可能很有用。您不希望程序中有多个对象实例(以及多个连接),而只需要在您的所有程序中只有一个数据库处理程序和连接实例。