什么是PHP的serialize()函数?

时间:2009-07-24 23:06:23

标签: php serialization

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

我也看到javascript中的序列化代码,这是一样的吗? javascript中的序列化字符串可以使用php unserialize()进行反序列化吗?

4 个答案:

答案 0 :(得分:27)

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

另一方面,

Wordpress通过将序列化数组直接存储在数据库中,将其用于非常类似的方法。如果你保留一个密钥数据库=>值,这可能是非常有益的,因为数组的灵活性,您可以在值参数中存储任何内容。

继续链接(由第一评论员提供):http://us3.php.net/serialize

答案 1 :(得分:14)

我经常在数据库中看到seralized数据存储,我真的不喜欢这个:

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

尽管如此,我承认这是一种存储未定义数据的简单方法......我有时会将其用于此...

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

如果这两个系统是PHP,您可以设想使用serialize / unserialize。但是,在这里,如果其中一个系统不再是PHP了怎么办?使用JSON或SOAP可能是一个更好的选择:一开始有点困难,但可能是一个更长期的解决方案,因为这些格式在其他语言中也是已知的。

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:0)

当您想要在PHP之外传递数据时使用序列化,例如使用Javascript。

是的,它通常用于发送字符串,整数和字符串,但不是更复杂的结构,如数组。阅读有关将PHP数组传递给Javascript here的更多信息。

您还可以将数据格式化为多种语言广泛支持的JSON,但在转换为PHP时,您将丢失PHP本机类型和您自己的类。阅读有关JSON和PHP here的更多信息。