我有一個理解的問題:
Singleton設計模式使用靜態函數調用像辛格爾頓的getInstance ::(),並在此功能,它使用像靜態變量自:: $ _實例。
根據定義,靜態函數和變量獨立於任何具體實例,並且每次僅爲其特定調用的目的而被誘發。那麼怎麼可能,任何值都可以存儲在這樣的準抽象和每次新創建的「對象」中?
希望你能理解我的問題。
我有一個理解的問題:
Singleton設計模式使用靜態函數調用像辛格爾頓的getInstance ::(),並在此功能,它使用像靜態變量自:: $ _實例。
根據定義,靜態函數和變量獨立於任何具體實例,並且每次僅爲其特定調用的目的而被誘發。那麼怎麼可能,任何值都可以存儲在這樣的準抽象和每次新創建的「對象」中?
希望你能理解我的問題。
靜態屬性與全局變量類似。它的可見性差異。全局變量可以被所有人更改爲公共靜態屬性,但私有或受保護的靜態屬性的可見性較低。
想象一下,類實際上是一個定義時創建的對象,只能在一個實例中存在。靜態屬性和方法是這個「對象」的屬性和方法。這就是爲什麼許多人不瞭解普通類與靜態成員和單身人士之間的差異。
Singleton設計(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
}
}
它不是一個單身人士,因爲你的__construct方法仍然打開。 – jaro1989
三件事情使課堂辛格爾頓否則將正常類。
也許你已經創建了計數器功能的類的靜態變量
該類不需要具備所有這些,可以使用依賴注入並指定注入器僅返回該類的同一實例的對象的生命週期。這也是一個單身人士。 – jmattheis
所以一個類本身可以被看作是(實例化)對象本身?這是相當混亂的,因爲每個定義的類應該只是從它派生的實例的「模板」。 – sasha