2009-11-24 79 views
1

我正在嘗試爲我的web應用程序設置一個新類,從原始過程編程開始重寫我的代碼。 由於我需要使用許多不同的(複雜)查詢填充我的對象,並且此對象將存儲在會話中,所以我決定創建另一個包含所有長查詢的靜態類。PHP - OOP - 存儲大對象在會話中保存

將同一類中的函數定義爲「靜態」而不創建新函數更方便嗎?我的目標是儘可能讓物體變得更輕...... thanx

+3

是我還是這樣做沒有意義?請更具體一些。 – 2009-11-24 13:38:13

+1

你在做什麼等於一個「上帝」的對象。如果是這樣,你可能希望重新考慮。 – dnagirl 2009-11-24 13:43:11

回答

2

這聽起來像你可能將數據庫訪問的功能與業務邏輯類組合在一起。

當不使用ORM層並使用較小的應用程序時,通常會創建一個負責所有與數據庫交互的類。該類將包含可重複使用的查詢位,該類將由該方法內的方法調用。我將這些位聲明爲私有靜態屬性。這個類不存儲任何數據。相反,它只是將數據傳遞給調用腳本或類。爲了減少內存消耗,我使用Singleton模式實現了這個類,以確保任何需要使用此類的腳本都使用該類的同一個實例,並且不會分配額外的內存。由於該類不用於存儲全局數據,因此避免了在這種情況下使用單例的風險。

此外,我建議您不要過多擔心內存消耗,除非您使用有限的硬件資源和/或大量被販運的網站。

+0

好的..你已經專注於我的問題並回答了我的問題。非常感謝你 – cesko80 2009-11-24 15:59:43

0

您應該儘可能縮小問題範圍,並相應地創建類。不是一個應該處理所有問題的'大'類。

每個類都處理您嘗試解決的整個問題的一個特定部分。

我想你會發現這是一個更容易解決問題的方法。

Tony

0

試着考慮你的db中的每個表都是一個類並在php中描述它。所以類propaply將有保存,讀取,更新和一些靜態方法索姆方法來檢索該類的對象的數組。

+0

如果使用這種方法,我強烈建議使用第三方ORM框架,如Doctrine或Propel。 – jkndrkn 2009-11-24 15:41:37

0

我認爲我的問題可以改寫爲: 是一個靜態函數(和他的所有成員)複製到保存在會話var中的序列化子對象中?我認爲這是有道理的,只有當我可以找到一個對象中的非靜態成員...