PHP中的编组/序列化是否像serialize($ var)一样简单?

时间:2010-04-10 22:41:28

标签: php marshalling

这是维基百科的编组定义:

  

在计算机科学,编组   (类似于序列化)是   改变记忆的过程   将对象表示为数据   格式适合存储或   传输。通常使用它   何时必须在数据之间移动   计算机程序的不同部分   或从一个程序到另一个程序。

我总是通过它的序列化函数在php中完成数据序列化,通常是在对象或数组上。但是维基百科对编组/序列化的定义是如何在这个serizalize()函数中发生的?

2 个答案:

答案 0 :(得分:3)

serialize不做的是传输类定义。在反序列化对象时,必须存在该对象的类定义(从代码库加载),否则反序列化将失败。来自the Wikipedia article you mention

  

“编组”一个对象意味着以这样的方式记录其状态和代码库:当编组的对象被“解组”时,可以通过自动加载原始对象的类定义获得原始对象的副本。物体。您可以封送任何可序列化或远程的对象。编组就像序列化一样,除了编组还记录代码库。编组与序列化不同,因为编组专门处理远程对象。

如果我理解正确,Serialize绝对不能与编组在这方面的定义100%兼容。我不知道在PHP中这样做的预定义机制。我想你必须将序列化数据和所有必要的类定义组合成一个包(例如ZIP文件)。

答案 1 :(得分:1)

与上面提到的Pekka一样,PHP不包含类定义,因此它不进行编组。但是,如果存在序列化对象的类,那么您的问题的答案是肯定的:序列化 就像serialize($abc)一样简单。

我知道在PHP中处理编组的最好方法是使用第三方工具,如Google Buffer Protocols或Facebook(Apache?)Thrift,它将为您序列化和编组。有点迂回的做法(只要你有班级,无论如何都不需要编组),但它们可能是解决问题的最佳方法。