2010-04-10 32 views
6

這裏的維基百科編組的定義:

在計算機科學中,編組 (類似序列化)是變換的對象的存儲器 表示成適合於貯存或 數據 格式的 過程傳輸。當數據必須在 計算機程序的不同部分 之間移動或從一個程序移動到另一個程序時,它通常用於 。

我一直在php中通過序列化函數完成數據序列化,通常在對象或數組上。但是,這個serizalize(函數中的維基百科定義的封送/序列化是如何發生的?

回答

3

serialize不能做的是傳輸類的定義。反序列化對象時,該對象的類定義必須存在(從代碼庫加載),否則反序列化將失敗。從the Wikipedia article you mention

到「編組」的對象是指由記錄其狀態和基本代碼(一個或多個),當所述編組對象是「解組」時,獲得原始對象的副本這樣的方式,有可能自動加載對象的類定義。您可以編組任何可序列化或遠程對象。編組就像序列化,除了編組也記錄代碼庫。編組與編組不同之處在於編組對待特定的遠程對象。

如果我理解正確,Serialize絕對不是100%兼容編組的定義在這方面。我不知道預先定義的機制會在PHP中做到這一點。我想你必須將序列化數據和所有必需的類定義合併到一個包中(例如一個ZIP文件)。

1

像上面提到的Pekka,PHP不包含類定義,所以它不會進行封送處理。但是,如果存在序列化對象的類,那麼對您的問題的答案是:序列化就像serialize($abc)一樣簡單。

我知道關注PHP封送處理的最佳方式是使用第三方工具,如Google Buffer Protocols或Facebook(Apache?)Thrift,它將爲您序列化和編組。有一種迂迴的做法(只要你有班級在場,無論如何都不需要管理),但他們可能是解決問題的最佳辦法。