PHP is still relatively commonly used, so I studied PHP object serialization and shared it with you here. I hope it will be useful to everyone. PHP object serialization is also a relatively common function, which can serialize an object into a string, which can be saved or transmitted. Let’s look at an example first:
<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>
Output result:
<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>
Let’s analyze the string after serialization of an object.
<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>
To be able to unserialize() an object, you need to define the class of the object. That is, if you serialize the object $a of class A in page1.php, you will get a string pointing to class A and containing the values of all variables in $a. If you want to deserialize it in page2.php and reconstruct the object $a of class A, the definition of class A must appear in page2.php. This can be achieved, for example, by placing the definition of class A in an include file and including this file in both page1.php and page2.php.
<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 class=""><SPAN>//classa.inc: </SPAN><LI class=alt><SPAN>classA </SPAN><LI class=""><SPAN>{ </SPAN><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></SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>functionshow_one() </SPAN><LI class=""><SPAN>{ </SPAN><LI class=alt><SPAN>echo$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></span></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>