我有一個只有靜態方法擴展類的子類。我想讓這個子類成爲單例而不是靜態的,因爲原始開發者確實想要一個單例,但是使用了靜態(顯而易見,因爲靜態類中的每個方法都調用Init()函數(基本上是構造函數))。非靜態調用靜態方法
大部分父方法不需要在孩子被覆蓋,但我想,以避免寫這樣的方法:
public function Load($id)
{
return parent::Load($id);
}
的時候我寧願不要覆蓋方法,只是使用:
$child->Load($id);
是否可以非靜態地調用靜態方法?是否有可能使用實例對象來擴展靜態對象?我知道我可以嘗試它,它可能會工作(PHP是非常寬容的),但我不知道是否有什麼我應該關心的。
爲什麼不只是使用普通的舊PHP對象?沒有所有的靜態和單例廢話你可能[不需要]頭痛(http://stackoverflow.com/questions/4595964/who-needs-singletons/4596323#4596323)。另外,是可測試的。畢竟,它被稱爲面向對象*而不是面向類。 – Gordon
Singleton是一種設計模式。它使用一個「普通的舊」php對象,它只是意味着它有一個私有的構造函數和一個靜態的GetInstance方法。它確保只存在一個對象的實例,但由於它有一個構造函數,所以不必在每個方法中初始化變量。 – Mike
我知道單身是什麼:)我所說的是:你不需要它。請參閱我的初始評論中的鏈接。你正在用靜力學和單身生活讓你的生活變得悲慘。 – Gordon