- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP 序列化和反序列化函数实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
序列化与反序列化 。
把复杂的数据类型压缩到一个字符串中 。
serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 。
1.创建一个$arr数组用于储存用户基本信息,并在浏览器中输出查看结果; 。
1
2
3
4
5
6
7
|
$arr
=
array
();
$arr
[
'name'
]=
'张三'
;
$arr
[
'age'
]=
'22'
;
$arr
[
'sex'
]=
'男'
;
$arr
[
'phone'
]=
'123456789'
;
$arr
[
'address'
]=
'上海市浦东新区'
;
var_dump(
$arr
);
|
输出结果:
1
2
3
4
5
6
7
|
array
(5) {
[
"name"
]=> string(6)
"张三"
[
"age"
]=> string(2)
"22"
[
"sex"
]=> string(3)
"男"
[
"phone"
]=> string(9)
"123456789"
[
"address"
]=> string(21)
"上海市浦东新区"
}
|
2.将$arr数组进行序列化赋值给$info字符串,并在浏览器中输出查看结果; 。
1
2
|
$info
=serialize(
$arr
);
var_dump(
$info
);
|
输出结果:
1
|
string(140)
"a:5:{s:4:"
name
";s:6:"
张三
";s:3:"
age
";s:2:"
22
";s:3:"
sex
";s:3:"
男
";s:5:"
phone
";s:9:"
123456789
";s:7:"
address
";s:21:"
上海市浦东新区
";}"
|
使用序列化serialize($arr)函数,将数组中元素的键和值按照规则顺序连接成字符串。a:5标志序列化为array包含5个键值对,s:4标志内容为字符串包含4个字符.
通过序列化我们可以将一些模块化的数据使用字符串的形式存储在数据库或session等,可以减少创建众多繁琐的数据表字段,当然序列化为字符串存储会增加额外的空间,应合理的设计和应用.
3.最后使用unserialize($info)反序列化将字符串还原成我们需要的数组模式; 。
1
2
|
$zhangsan
=unserialize(
$info
);
var_dump(
$zhangsan
);
|
输出结果:
1
2
3
4
5
6
7
|
array
(5) {
[
"name"
]=> string(6)
"张三"
[
"age"
]=> string(2)
"22"
[
"sex"
]=> string(3)
"男"
[
"phone"
]=> string(9)
"123456789"
[
"address"
]=> string(21)
"上海市浦东新区"
}
|
PHP序列化反序列化serialize和unserialize函数 。
昨天网上看到一道面试题,如下:
“类的属性可以序列化后保存到session中,从而以后可以恢复整个类,这要用到的函数是?” 。
我记得原来老师说过序列化函数是"serialize",查了下,果不其然,今天记录下,免得忘记.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
class
aa{
public
$a
= 1;
private
$b
= 2;
protected
$c
= 3;
function
afun(){
return
$this
->a;
}
function
bfun(){
return
$this
->b;
}
function
__destruct(){
echo
"变量销毁了"
;
}
}
$v
=
new
aa;
echo
$v
->afun();
$se
= serialize(
$v
);
unset(
$v
);
//这里先销毁$v,这个时候会自动调用析构函数
echo
"<hr />"
;
$v
= unserialize(
$se
);
//再反序列化
echo
$v
->bfun();
|
看看运行结果 。
如果觉得还不明显, 好,我们在改一下代码 。
aa.class.php 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?php
class
aa{
public
$a
= 1;
private
$b
= 2;
protected
$c
= 3;
function
afun(){
return
'$a的值是:'
.
$this
->a;
}
function
bfun(){
return
'$b的值是:'
.
$this
->b;
}
}
|
a1.php 。
1
2
3
4
5
|
<?php
require
'./demo8.php'
;
Session_start();
$v
=
new
aa();
$_SESSION
[
'v'
] = serialize(
$v
);
|
a2.php 。
1
2
3
4
5
|
<?php
require
'./demo8.php'
;
Session_start();
$v
= unserialize(
$_SESSION
[
'v'
]);
echo
$v
->bfun();
|
再看看结果是不是一目了然了呢,好了,试验做完了,结论调用下公论。 例子中的对象我们还可以换为数组等其他类型,效果都是一样的! 其实serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不同PHP程序间传递了。 而unserialize()就是把序列化的字符串转换回PHP的值.
这里再引用一段PHP手册上的说明,看了上面的例子,应该很容易明白下面这些话的意思了 想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储.
当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数 unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE.
以上所述是小编给大家介绍的PHP 序列化和反序列化函数实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:http://www.cnblogs.com/yuxb/p/6792413.html 。
最后此篇关于PHP 序列化和反序列化函数实例详解的文章就讲到这里了,如果你想了解更多关于PHP 序列化和反序列化函数实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我目前正在对一个 mmorpg 的二进制网络协议(protocol)进行逆向工程。我正在用 java 实现该协议(protocol)。 对于每个数据包类型,我将创建一个表示二进制数据的类。 例如,聊天
我正在尝试围绕现有类编写半透明包装器,我希望它能够模仿其他类的序列化。 例如,给定以下类: class Foo { [JsonConverter(CustomConverter)] s
是否有使用 Jackson 序列化和反序列化枚举集的简单方法? private enum Type { YES, NO } @JacksonXmlProperty(localName = "t
我很想知道当我们反序列化一个对象时会发生什么。 例如,如果我的类对象由许多其他对象组成,对象创建过程如何在反序列化过程中发生 最佳答案 对象是用默认的初始化字段创建的,然后用从串行流中获取的属性值填充
我正在尝试序列化和反序列化(使用 QDataStream 但这与这里无关)一个 enum class变量: enum class Type : char { Trivial, Comp
我不确定这到底有什么问题...它不会为我编译,我将它从 c 翻译成 C++(或尝试)...是的,我是初学者。谢谢! #include #include using namespace std; i
我遇到的问题与此处描述的问题非常相似:Combining type and field serializers case class(id: Option[UUID], otherValue:Stri
我们知道base中的apply()可以对数组的边距应用一个函数,边距应该是行或列。我想将边距扩大到“对角线” 和“反对角线”。结构看起来像 diagApply <- function(x, FUN,
我找到了 JSON serialization and deserialization to objects in Flutter 的例子但是如何使用像这样的人员列表来做到这一点: [ {
我有一个相当大的terms聚合结果,这些结果被加载到下拉列表中以提供filter功能。 可以说,我的下拉列表中有4000多种动物。我的另一个下拉列表有4种动物颜色。 例, animal --> ["d
我需要将 C# (.NET Framework 4.5.2) 中的一个类与 XML 序列化(反序列化),该类具有 string 的字典属性。键和 string[]数组值。我正在使用 Serializa
[已解决]应用给定的解决方案,效果很好! 程序的目的:在用户打开和关闭程序时保存/重新加载以前的数据。 我曾经用一个对象(obj)成功(反)序列化,现在我有两个不同类的不同对象。 我试图通过查看其他帖
问题 假设我有一个代表某事或其他的枚举: public enum ResultState { Found, Deleted, NotFound } 在我的序列化 json 中,
是否有取消 JSON 字符串的功能?我猜它不会内置到 JQuery 中,但它可以通过编写一个操纵字符串的脚本来实现吗?我在下面遇到了这个问题。 我正在使用 NYTimes API,但它不支持 JSON
对于这个问题,假设当对象完全写入流并成功读出时,或者当对象部分写入流并且读回对象时发生异常时,序列化/反序列化是原子的。假设写操作可能无法成功完成,例如因为停电了。 在Serializable的描述中
有谁知道时序检查是否仍在检测虚拟环境?我尝试使用 rdtsc 指令来获取 cpu 周期并比较真实 linux 机器和在 virtualbox 上运行的 linux 之间的结果。但结果似乎不稳定。有时,
我正在对一个(外部给定的)XML 文件进行操作,该文件具有以下形式的元素 10 20 30 40 50 60 70 80 我知道如何将属性作为属性处理(通过使用 [XmlAttri
我有一个通用的序列化器和反序列化器,用于通过网络连接发送的消息: public static async Task SerializeObject(Object obj) {
我正在考虑将当前基于 WCF 的应用程序迁移到 protobuf-net.Grpc。这似乎是可行的,但是我无法在不包含所有具有 [ProtoInclude] 属性的派生类的情况下使(DTO 类)基类的
我正在尝试将一些数据保存到文件中,但文件保存到的目录不正确。 using (StreamWriter sw = new StreamWriter(dir + "\\temp" + x + ".txt"
我是一名优秀的程序员,十分优秀!