如您所知,當您在SESSION中自動序列化存儲類定義時,並且在每個後續頁面上都將反序列化。我應該在SPEED會話中存儲我的PHP5對象,爲什麼?
我剛開始寫類,我想知道: 要存儲一個類在會話或文件與序列化是一個好主意?
如果是的話,我該如何儲存,然後GET使用PHP5中的班級?
如您所知,當您在SESSION中自動序列化存儲類定義時,並且在每個後續頁面上都將反序列化。我應該在SPEED會話中存儲我的PHP5對象,爲什麼?
我剛開始寫類,我想知道: 要存儲一個類在會話或文件與序列化是一個好主意?
如果是的話,我該如何儲存,然後GET使用PHP5中的班級?
存儲對象實例有以下缺點:
我寧願將對象存儲在專用的緩存中。查看Zend Cache類作爲一個好的緩存庫的例子。
如果你的對象使用資源(數據庫連接,文件,gd圖像),你的類應該實現接口Serializable
。然後你必須添加兩個方法來完成清理和初始化工作。
您不會將類存儲在會話變量中,但可以存儲對象。請注意,如果您的對象具有引用資源(如文件句柄和數據庫連接)的屬性,則不會導致反序列化。
除非它是一個小班,可能不是(see this question for possible pitfalls with large sessions)。簡而言之,會話並不是設計成一個緩存機制,當你將它們合併爲一個時,它們表現得並不好。
請注意,如果您使用的是默認會話處理程序,則會話將存儲在硬盤驅動器上 - 當您收到許多併發請求時,會話速度不會很快。另外(測試和度量),序列化/反序列化可能比正常的對象創建方法慢 - 請注意,您可能會反序列化兩次:從會話到字符串,然後串入該類的對象。
如果您想要進行序列化/反序列化路由,請嘗試改爲Memcached。在會議