什么是序列化

序列化用到的函数serialize()
序列化就是将一个数组和对象变成一个字符,可以方便传递和存储,他的结构不会改变

数组序列化

咧:

1
2
3
4
5
6
<?php
//数组
$I =array('One','two',12);

//输出序列化之后的数据
echo serialize($I);

结果

输出的内容介绍

1
a:3:{i:0;s:3:"One";i:1;s:3:"two";i:2;s:5:"three";}

a:类型数组|
类型有a代表数组,s代表字符,i代表数字,o代表对象,N代表空的,b代表布尔,等等我会把他放到最下面
3:数组长度|
i:0;i是int型的,0是第一个数组|
s:是一个字符串|
3:"two";有三个字符是"two"|
i:1;i是int型的,1第二个数组|
s:是一个字符串|
3:"two";有三个字符是"two"|
i:i是int型的,2第三个数组|
s:是一个字符串|
5:"three";有五个字符是"three"|

数组反序列化

反序列化会用到unserialize()函数进行反序列化
我们将序列化出来的字符保存到文件里面然后在给反向序列化出来

将序列化的字符串保存到文件里面
咧:
下面会用到file_put_contents()函数
file_put_contents()函数使用https://www.runoob.com/php/func-filesystem-file-put-contents.html

1
2
3
4
5
6
7
8
9
10
<?php
//数组
$I =array('One','two',1111);

//输出序列化之后的数据
echo serialize($I);
$a=serialize($I);

//叫序列化的内容保存到a.txt文件里面
file_put_contents("a.txt",$a);

结果

已经保存到了a.txt文件里面了

读取文件的被序列化的字符串给反向序列化出来
反向序列化会把被序列化的数组给变回来
咧:
fread() 函数打开文件
fgets() 函数用于从文件读取单行
fclose() 函数用于关闭打开的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//打开文件
$myfile = fopen("a.txt", "r");
//叫读出来的字符赋值给变量$a
$a=fgets($myfile);
//反序列化赋值给变量$b
$b=unserialize($a);

//输出变量的相关信息
var_dump($b);

//读取数组里面的内容
echo "<br>".$b[0].$b[1].$b[2];
//关闭打开的文件
fclose($myfile);

对象序列化

对象序列化方法和数组一样
咧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class Site {
//公用变量
public $url = "aaa";

//公用变量
public $twourl ="bbb";

//方法
function setUrl(){
echo "ccc";
}
}
//实例化该类的对象
$a= new Site();
//序列化并输出出来
echo serialize($a);

结果

1
O:4:"Site":2:{s:3:"url";s:3:"aaa";s:6:"twourl";s:3:"bbb";}

o:类型是对象|
类型有o代表对象s代表字符,i代表数字,a代表数组,,N代表空的,b代表布尔,等等我会把他放到最下面
4:代表对象名字站几个字符|
"Site":代表对象名字|
2:代表里面有变量|
s:代表是一个字符串类型的|
3:代表内容有三个字符|
"url";代表变量名是"url"|
s:代表是一个字符串类型的|
3:代表内容有三个字符|
"aaa"代表"url"内容是"aaa"|
s:代表是一个字符串类型的|
6:代表内容有六个字符|
"twourl";代表变量名是"twourl"|
s:代表是一个字符串类型的|
3:代表内容有三个字符|
"bbb"代表"twourl"内容是"bbb"|

对象反序列化

对象和数组反序列化也是一样的

反序列化会用到unserialize()函数进行反序列化
我们将序列化出来的字符保存到文件里面然后在给反向序列化出来

将序列化的字符串保存到文件里面
咧:
下面会用到file_put_contents()函数
file_put_contents()函数使用https://www.runoob.com/php/func-filesystem-file-put-contents.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class Site {
//公用变量
public $url = "aaa";

//公用变量
public $twourl ="bbb";

//公用方法
public function setUrl(){
echo "ccc";
}
}
//实例化该类的对象
$a= new Site();
//序列化的字符串赋值给$b变量
$b=serialize($a);
//叫序列化的内容保存到a.txt文件里面
file_put_contents("a.txt",$b);

结果

读取文件的被序列化的字符串给反向序列化出来
反向序列化会把被序列化的数组给变回来
咧:
fread() 函数打开文件
fgets() 函数用于从文件读取单行
fclose() 函数用于关闭打开的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
class Site {
//公用变量
public $url = "aaa";

//公用变量
public $twourl ="bbb";

//公用方法
public function setUrl(){
echo "ccc";
}
}
//实例化该类的对象
$a= new Site();
//序列化的字符串赋值给$b变量
$b=serialize($a);
//叫序列化的内容保存到a.txt文件里面
file_put_contents("a.txt",$b);

//打开文件
$myfile = fopen("a.txt", "r");
//叫读出来的字符赋值给变量$a
$a=fgets($myfile);
//反序列化赋值给变量$b
$b=unserialize($a);

//输出反序列化
var_dump($b);

echo "<br>";
//输出反序列化内容
var_dump($b->url);
//关闭打开的文件
fclose($myfile);

结果