PHP 的 serialize() 函数是干啥用的?

Posted

技术标签:

【中文标题】PHP 的 serialize() 函数是干啥用的?【英文标题】:What is PHP's serialize() function for?PHP 的 serialize() 函数是干什么用的? 【发布时间】:2010-11-13 21:57:58 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

你刚才说你要以文本形式保存一个数组,这是错误的。您可以序列化任何类型的变量。你甚至可以序列化一个对象。当您反序列化一个对象时,您唯一需要考虑的是拥有您将反序列化的对象的声明 顺便说一句,在段落的末尾我最初说它用于对象和数组。【参考方案2】:

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

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

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

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

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

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

【讨论】:

很棒的评论帕斯卡!如果大家有兴趣,还有这个很棒的post 比较json_encode和serialize。【参考方案3】:

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

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

【讨论】:

是的,这通常是我使用它的方式。特别是如果您有未知数量的 key=>val 对(具有未知名称),则很难构建一个好的数据库结构来处理它。 @Christian:看EAV模式。将这类数据规范化到数据库中一点也不难,实际上要灵活得多。 我开始为此使用 json。允许您以 更多 标准格式保存数据,而不是 php 序列化 @Nelson:很有趣,将更深入地研究 EAV 模式。谢谢你告诉我!【参考方案4】:

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

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

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

【讨论】:

您开始回答序列化用于将 php 之外的数据传递给例如的信息。 js,但是如果你的目标不再是 php,那么保留原生 php 类型的目的是什么? 好评!没错,如果您的目标不再是 php,那么它可能不支持 PHP 本机类型。但是您的中间步骤(目标)可以是将数据存储在数据库中,然后在 PHP 中再次使用它。

以上是关于PHP 的 serialize() 函数是干啥用的?的主要内容,如果未能解决你的问题,请参考以下文章

scala ide是干啥用的

sys_context () 这个函数 是做啥用的,举个例子。v$session里的audsid 是干啥用的。

SendMessage函数是干啥用的 它都有哪些参数

vscode是干啥用的

python中函数参数列表中使用的 冒号是干啥用的

R语言里attach函数是干啥用的