2010-01-07 36 views
0

我想知道,有什麼優點和這兩種方法的利弊訪問變量:

1)CodeIgniter的風格(這也有一個名字)

public function doSomething() 
{ 
$database = $this->database; // or just $this->database 
} 

2)Singleton模式

public function doSomething() 
{ 
$database = Framework_Database::getInstance(); 
} 

一個明顯的區別是,辛格爾頓,你不能修改它。你只能訪問它,但我只是在訪問一個類或變量的實例方面進行討論。

哦,還有,還有其他方法嗎?

回答

3

獲取對現有實例的引用的這兩種方法實際上並不相互排斥。第一種是假設doSomething()方法包含在一個也包含$ database字段的類中,該字段已被設置爲數據庫實例(可能通過類構造函數)。 $ this->數據庫的初始設置很可能是通過使用單例的getInstance()方法實現的。

那麼我想你可以比較兩個關於你是否將一個實例引用作爲類的一個字段,或者總是直接從Singleton請求一個新的引用。我想不出一個時間,這不會簡單地偏好,但絕對選擇一個並堅持下去。 (個人而言,我會選擇第二個關注點分離)

最重要的是,您在代碼中使用的模式的一致性將大大降低維護成本。