2012-08-24 31 views
5

我一直被告知在創建靜態類時要非常小心,因爲它們傾向於被不太熟練的程序員濫用。我的會話類應該是靜態的嗎?

我目前正在用PHP編寫一個會話類來跟蹤網站上的用戶。

一個會話似乎是有意義的在一個靜態類中,因爲只會有一個是正確的嗎?

我曾經在一個CMS工作,該工廠創建了一個會話對象,然後存儲實例以及何時請求了新會話(MyFactory :: getSession()),它將返回以前初始化的會話。這有什麼好處嗎?

謝謝!

+1

不,'MyFactory ::的getSession()'沒有多大意義,是的,使用一個靜態類將會很好。 – Ryan

+0

我認爲如果你這麼傾向於你可以玩多個會話。 –

+0

你爲什麼要多個會議? – Undefined

回答

4

不,類應該從來沒有是靜態的,如果你正在做面向對象的編程。這也適用於工廠。靜態工廠方法模式(您在示例中顯示)被認爲是不好的做法,因爲它違反了SRP

靜態變量是不同名稱的全局變量,靜態方法是名稱空間函數,其中名稱空間恰好看起來像類。

如果您需要多個對象來使用相同的會話實例,那麼您應該提供它們。直接或通過使用工廠。

class ObjectFactory 
{ 

    protected $session; 

    public function __construct($session) 
    { 
     $this->session = $session; 
    } 

    public function create($name) 
    { 
     return new $name($this->session); 
    } 

} 

您將此工廠的實例傳遞給需要使用會話的創建結構的任何對象。您只需使用此工廠創建對象,並且它們都將使用相同的會話實例進行初始化。

更簡單的例子,你可以只通過該會話的每個對象手動:現在

$session = new Session; 

$user = new User($session); 
$article = new Document($session); 

兩個$user$article實例將共享同一個會話實例。

欲瞭解更多信息,請觀看以下介紹:

相關問題