什么是PHP的serialize()函数?

Jas*_*vis 33 php serialization

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

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

Tyl*_*ter 27

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

另一方面,Wordpress通过将序列化数组直接存储在数据库中,将其用于非常类似的方法.如果你保留一个keys => values的数据库,这可能是非常有益的,因为数组的灵活性,你可以在value参数中存储任何东西.

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

  • 你刚才说_你要保留一个文本形式的数组_这是错误的.您可以序列化任何类型的变量.你甚至可以序列化一个对象.当你*反序列化*一个对象时,你需要考虑的唯一事情就是让你要反序列化的对象的声明 (4认同)

Pas*_*TIN 16

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

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

不过,我承认这是一种存储未定义数据的简单方法......我有时会使用它...

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

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

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

  • 很棒的评论Pascal!如果人们对此感兴趣,那么还有一个很棒的[post](http://stackoverflow.com/questions/804045/preferred-method-to-store-php-arrays-json-encode-vs-serialize)比较json_encode和连载。 (2认同)

Jam*_*ore 7

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

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

  • @Christian:看看EAV模式.实际上,将这种数据规范化为数据库并不困难,实际上要灵活得多. (2认同)
  • 我开始使用json.允许您以比*序列化更多*标准格式保存数据 (2认同)