关于序列化:PHP的serialize()函数的作用是什么?

What is PHP's serialize() function for?

我刚刚了解了serialize()unserialize()函数。 有什么用? 我知道人们将事物序列化到数据库中。 您能给我一些有用的示例用法吗?

我还看到了javascript中的序列化代码,这是一样的吗? javascript中的序列化字符串可以用php unserialize()取消序列化吗?


PHP序列化允许您将数组或对象保留为文本形式。将数组分配给$ _SESSION之类的东西时,它允许PHP将其存储在文本文件中,然后在以后重新创建它。序列化用于对象和变量。 (只需确保事先声明了对象使用的类)

另一方面,Wordpress通过将序列化的数组直接存储在数据库中,将其用于非常相似的方法。如果保留键=>值的数据库,由于数组的灵活性,这可能会非常有益,您可以在value参数中存储任何内容。

这是链接(由第一位评论者提供):http://us3.php.net/serialize


我经常在数据库中看到序列化数据存储,但我真的不喜欢这样:

  • 在SQL中使用该数据真的很困难:如何在序列化数据上编写条件?更难的是:如何更新它?您是否真的编写了一个PHP脚本来获取每一行,反序列化,修改,重新序列化并将它们存储回DB中? :-(
  • 您将数据迁移到另一软件的那一天,将需要更多的工作来迁移数据(如果新软件不是用PHP编写的,则需要更多工作,顺便说一句)

尽管如此,我还是承认这是一种存储定义不明确的数据的简便方法……而且有时我会为此使用它……

序列化的另一个用途是促进两个系统之间的数据交换:例如,通过某种Web服务发送对象需要以某种方式对它们进行序列化。

如果两个系统都是PHP,则可以设想使用serialize / unserialize。但是,如果这里的系统之一不再是PHP,该怎么办?使用JSON或SOAP可能是一个更好的选择:起初比较困难,但可能是一个更长期的解决方案,因为其他语言也知道这些格式。

我使用PHP的serialize函数的一件事是在PHP应用程序中将数据存储在缓存中(例如APC用户的缓存):您不能按原样存储对象:必须序列化它们。由于缓存仅由一个应用程序使用,因此不必使用多种语言已知的格式。因此,序列化就可以了...而且,要将数据存储在缓存中,您应该使用真正快速的序列化功能-序列化非常快^^


我经常使用serialize将重要信息存储在数据库中,这不值得为其创建一个全新的字段,但将来可能会有用。

例如,如果用户填写一个表单,我只存储了其中的几个元素,但是我想保留所有这些元素,以防以后需要它们,那么我将序列化表单元素的数组并将其存储在数据库中。


当您要将数据传递到PHP之外(例如传递给Javascript)时,可以使用序列化。

是的,它通常可以按原样发送字符串,整数和字符串,但不能像数组那样发送更复杂的结构。在此处阅读有关将PHP数组传递给Javascript的更多信息。

您还可以将数据格式化为许多语言广泛支持的JSON,但是随后在转换为PHP原生类型和您自己的类时,它们就会松散。在此处阅读有关JSON和PHP的更多信息。