Maison > développement back-end > tutoriel php > 简简单单PHP对象序列化学习_PHP教程

简简单单PHP对象序列化学习_PHP教程

WBOY
Libérer: 2016-07-15 13:27:47
original
878 Les gens l'ont consulté

PHP还是比较常用的,于是我研究了一下PHP对象序列化,在这里拿出来和大家分享一下,希望对大家有用。PHP对象序列化也是一个比较普遍的功能,能够把一个对象进行串行化以后变成一个字符串,能够保存或者传输。我们先看一个例子:

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

36

37

38

<ol class="dp-xml">

<li class="alt"><span><span>classTestClass  </span></span></li>

<li class=""><span>{  </span></li>

<li class="alt"><span>var$a;  </span></li>

<li class=""><span>var$b;  </span></li>

<li class="alt"><span> </span></li>

<li class=""><span>functionTestClass()  </span></li>

<li class="alt"><span>{  </span></li>

<li class="">

<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">a</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"Thisisa"</font></span><span>;  </span>

</li>

<li class="alt">

<span>$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span class="attribute"><font color="#ff0000">b</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"Thisisb"</font></span><span>;  </span>

</li>

<li class=""><span>}  </span></li>

<li class="alt"><span> </span></li>

<li class=""><span>functiongetA()  </span></li>

<li class="alt"><span>{  </span></li>

<li class="">

<span>return$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>a;  </span>

</li>

<li class="alt"><span>}  </span></li>

<li class=""><span> </span></li>

<li class="alt"><span>functiongetB()  </span></li>

<li class=""><span>{  </span></li>

<li class="alt">

<span>return$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>b;  </span>

</li>

<li class=""><span>}  </span></li>

<li class="alt"><span>}  </span></li>

<li class="">

<span>$</span><span class="attribute"><font color="#ff0000">obj</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">newTestClass</font></span><span>;  </span>

</li>

<li class="alt">

<span>$</span><span class="attribute"><font color="#ff0000">str</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">serialize</font></span><span>($obj);  </span>

</li>

<li class=""><span>echo$str;  </span></li>

</ol>

Copier après la connexion

输出结果:

1

<ol class="dp-xml"><li class="alt"><span><span>O:9:"TestClass":2:{s:1:"a";s:9:"Thisisa";s:1:"b";s:9:"Thisisb";} </span></span></li></ol>

Copier après la connexion

我们来分析一个对象串行化之后的字符串。

1

2

3

4

5

6

7

<ol class="dp-xml">

<li class="alt"><span><span>O:9:"TestClass":2:  </span></span></li>

<li class=""><span>{  </span></li>

<li class="alt"><span>s:1:"a";s:9:"Thisisa";  </span></li>

<li class=""><span>s:1:"b";s:9:"Thisisb";  </span></li>

<li class="alt"><span>} </span></li>

</ol>

Copier après la connexion

首先看对于对象本身的内容:O:9:"TestClass":2:O是说明这是一个对象类型(object),然后9是代表对象的名字查过浓度,2是代表该对象有几个属性。在看两个属性的内容:s:1:"a";s:9:"Thisisa";其实跟数组的内容比较类似,第一项:s:1:"a";是描述属性名称的,第二项s:9:"Thisisa";是描述属性值的。后面的属性类似。先说一种PHP对象序列化的应用,下面的内容是PHP手册上,没有更改原文。serialize()返回一个字符串,包含着可以储存于PHP的任何值的字节流表示。unserialize()可以用此字符串来重建原始的变量值。用序列化来保存对象可以保存对象中的所有变量。对象中的函数不会被保存,只有类的名称。

要能够unserialize()一个对象,需要定义该对象的类。也就是,如果序列化了page1.php中类A的对象$a,将得到一个指向类A的字符串并包含有所有$a中变量的值。如果要在page2.php中将其解序列化,重建类A的对象$a,则page2.php中必须要出现类A的定义。这可以例如这样实现,将类A的定义放在一个包含文件中,并在page1.php和page2.php都包含此文件。

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

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<ol class="dp-xml">

<li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li>

<li class=""><span>//classa.inc:  </span></li>

<li class="alt"><span>classA  </span></li>

<li class=""><span>{  </span></li>

<li class="alt">

<span>var$</span><span class="attribute"><font color="#ff0000">one</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">1</font></span><span>;  </span>

</li>

<li class=""><span> </span></li>

<li class="alt"><span>functionshow_one()  </span></li>

<li class=""><span>{  </span></li>

<li class="alt">

<span>echo$this-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>one;  </span>

</li>

<li class=""><span>}  </span></li>

<li class="alt"><span>}  </span></li>

<li class=""><span> </span></li>

<li class="alt"><span>//page1.php:  </span></li>

<li class=""><span>include("classa.inc");  </span></li>

<li class="alt"><span> </span></li>

<li class="">

<span>$</span><span class="attribute"><font color="#ff0000">a</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">newA</font></span><span>;  </span>

</li>

<li class="alt">

<span>$</span><span class="attribute"><font color="#ff0000">s</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">serialize</font></span><span>($a);  </span>

</li>

<li class=""><span>//将$s存放在某处使page2.php能够找到  </span></li>

<li class="alt">

<span>$</span><span class="attribute"><font color="#ff0000">fp</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">fopen</font></span><span>("store","w");  </span>

</li>

<li class=""><span>fputs($fp,$s);  </span></li>

<li class="alt"><span>fclose($fp);  </span></li>

<li class=""><span> </span></li>

<li class="alt"><span>//page2.php:  </span></li>

<li class=""><span>//为了正常解序列化需要这一行  </span></li>

<li class="alt"><span>include("classa.inc");  </span></li>

<li class=""><span> </span></li>

<li class="alt">

<span>$</span><span class="attribute"><font color="#ff0000">s</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">implode</font></span><span>("",@file("store"));  </span>

</li>

<li class="">

<span>$</span><span class="attribute"><font color="#ff0000">a</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">unserialize</font></span><span>($s);  </span>

</li>

<li class="alt"><span> </span></li>

<li class=""><span>//现在可以用$a对象的show_one()函数了  </span></li>

<li class="alt">

<span>$a-</span><span class="tag"><strong><font color="#006699">></font></strong></span><span>show_one();  </span>

</li>

<li class="">

<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>

</li>

</ol>

Copier après la connexion

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446493.htmlTechArticlePHP还是比较常用的,于是我研究了一下PHP对象序列化,在这里拿出来和大家分享一下,希望对大家有用。PHP对象序列化也是一个比较普遍的...
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal