1

我有一个理解问题:

单例设计模式使用像 Singleton::getInstance() 这样的静态函数调用,在这个函数中它使用像 self::$_instance 这样的静态变量。

根据定义,静态函数和变量独立于任何具体实例,并且每次都被调用,只是为了它的特定调用。那么,任何值怎么可能存储在这样的准抽象和每次新创建的“对象”中?

希望你能理解我的问题。

4

3 回答 3

3

静态属性类似于全局变量。差异仅在于其可见性。每个人都可以将全局变量更改为公共静态属性,但私有或受保护的静态属性的可见性较低。

想象一下,该类实际上是一个在定义时创建的对象,并且只能存在于一个实例中。静态属性和方法是这个“对象”的属性和方法。这就是为什么许多人不理解具有静态成员的常规类和单例之间的区别。

可见性,静态,单例模式

于 2013-07-05T11:04:04.687 回答
2

单例设计(反)模式允许确保最多创建一个实例。

该属性是静态的,因此可以从静态方法访问它。然而,底层对象是一个真实的、活动的实例。从静态方法中,您不能使用$this,但您可以引用任何已经实例化的对象,这self::$_instance恰好是)

class SingletonClass {

    private static $_instance;
    private $_someProperty;

    public static function getSomeProperty() {
        return self::$_instance->_someProperty; // allowed, self::$_instance is static, but a real object nonetheless
    }

}
于 2013-07-05T12:39:22.223 回答
-1

三件事使课程成为单身人士,否则它将成为普通课程。

  1. 静态变量
  2. 静态方法
  3. 私有构造函数

可能你已经为计数器功能创建了一个类,Singleton 是一样的。

于 2016-08-10T11:47:27.617 回答