我有一个理解问题:
单例设计模式使用类似Singleton :: getInstance()的静态函数调用,在此函数中它使用静态变量,如self :: $ _ instance。
根据定义,静态函数和变量独立于任何具体实例,并且每次仅为了特定调用的目的而被引发。那怎么可能,任何价值都可以存储在这样的准抽象和每次新创造的“对象”中?
希望你理解我的问题。
答案 0 :(得分:3)
静态属性类似于全局变量。仅与其可见性不同。全局变量可以被所有人更改为公共静态属性,但私有或受保护的静态属性的可见性较低。
想象该类实际上是一个在定义时创建的对象,并且只能存在于一个实例中。静态属性和方法是此“对象”的属性和方法。这就是为什么许多人不理解常规类与静态成员和单例之间的差异。
答案 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成为普通类。
可能你已经为计数器功能创建了一个类,Singleton也是如此。