Singleton:静态变量$instance如何存储数据


Singleton: How does static variable $instance store data

我有一个理解问题:

singleton设计模式使用静态函数调用,如singleton::getInstance(),在该函数中使用静态变量,如self::$_instance。

根据定义,静态函数和变量与任何具体实例无关,每次都只是为了特定调用的目的而被调用。那么,任何值都可以存储在这样的准抽象中,并且每次都是新创建的"对象",这怎么可能呢?

希望你能理解我的问题。

静态属性类似于全局变量。只是视觉上的差异。全局变量可以作为公共静态属性由每个人更改,但私有或受保护的静态属性的可见性较低。

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

可见性、静态、单例模式

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

该属性是静态的,因此可以从静态方法访问。然而,底层对象是一个真实的、活动的实例。从静态方法中,不能使用$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
    }
}

有三件事使类成为Singleton,否则它将成为一个普通类。

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

也许您已经为计数器功能创建了一个类,Singleton也是如此。