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

时间:2013-07-05 10:51:36

标签: php design-patterns static singleton

我有一个理解问题:

单例设计模式使用类似Singleton :: getInstance()的静态函数调用,在此函数中它使用静态变量,如self :: $ _ instance。

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

希望你理解我的问题。

3 个答案:

答案 0 :(得分:3)

静态属性类似于全局变量。仅与其可见性不同。全局变量可以被所有人更改为公共静态属性,但私有或受保护的静态属性的可见性较低。

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

Visibilitystaticsingleton pattern

答案 1 :(得分:2)

Singleton design (anti-)pattern允许确保最多创建一个实例。

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

}

答案 2 :(得分:-1)

有三件事使类Singleton成为普通类。

  1. 静态变量
  2. 静态方法
  3. 私人构造函数
  4. 可能你已经为计数器功能创建了一个类,Singleton也是如此。