新关键字vs创建实例

时间:2012-04-17 21:12:07

标签: php oop instantiation

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

$router = Cfw_Router::getInstance();

而不仅仅是使用

$rounter = new Cfw_Router();

它有优势吗?


getInstance()

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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