php还是比较常用的,于是我研究了一下php对象序列化,在这里拿出来和大家分享一下,希望对大家有用。php对象序列化也是一个比较普遍的功能,能够把一个对象进行串行化以后变成一个字符串,能够保存或者传输。我们先看一个例子:
<OL class=dp-xml><LI class=alt><SPAN><SPAN>classTestClass </SPAN></SPAN><LI class=""><SPAN>{ </SPAN><LI class=alt><SPAN>var$a; </SPAN><LI class=""><SPAN>var$b; </SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>functionTestClass() </SPAN><LI class=alt><SPAN>{ </SPAN><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></SPAN><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></SPAN><LI class=""><SPAN>} </SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>functiongetA() </SPAN><LI class=alt><SPAN>{ </SPAN><LI class=""><SPAN>return$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>a; </SPAN></SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>functiongetB() </SPAN><LI class=""><SPAN>{ </SPAN><LI class=alt><SPAN>return$this-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>b; </SPAN></SPAN><LI class=""><SPAN>} </SPAN><LI class=alt><SPAN>} </SPAN><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></SPAN><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></SPAN><LI class=""><SPAN>echo$str; </SPAN></LI></OL>输出结果:
<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>我们来分析一个对象串行化之后的字符串。
<OL class=dp-xml><LI class=alt><SPAN><SPAN>O:9:"TestClass":2: </SPAN></SPAN><LI class=""><SPAN>{ </SPAN><LI class=alt><SPAN>s:1:"a";s:9:"Thisisa"; </SPAN><LI class=""><SPAN>s:1:"b";s:9:"Thisisb"; </SPAN><LI class=alt><SPAN>} </SPAN></LI></OL>要能够unserialize()一个对象,需要定义该对象的类。也就是,如果序列化了page1.php中类A的对象$a,将得到一个指向类A的字符串并包含有所有$a中变量的值。如果要在page2.php中将其解序列化,重建类A的对象$a,则page2.php中必须要出现类A的定义。这可以例如这样实现,将类A的定义放在一个包含文件中,并在page1.php和page2.php都包含此文件。
立即学习“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>></FONT></STRONG></SPAN><SPAN>one; </SPAN></SPAN><LI class=""><SPAN>} </SPAN><LI class=alt><SPAN>} </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>//page1.php: </SPAN><LI class=""><SPAN>include("classa.inc"); </SPAN><LI class=alt><SPAN> </SPAN><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></SPAN><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></SPAN><LI class=""><SPAN>//将$s存放在某处使page2.php能够找到 </SPAN><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></SPAN><LI class=""><SPAN>fputs($fp,$s); </SPAN><LI class=alt><SPAN>fclose($fp); </SPAN><LI class=""><SPAN> </SPAN><LI class=alt><SPAN>//page2.php: </SPAN><LI class=""><SPAN>//为了正常解序列化需要这一行 </SPAN><LI class=alt><SPAN>include("classa.inc"); </SPAN><LI class=""><SPAN> </SPAN><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></SPAN><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></SPAN><LI class=alt><SPAN> </SPAN><LI class=""><SPAN>//现在可以用$a对象的show_one()函数了 </SPAN><LI class=alt><SPAN>$a-</SPAN><SPAN class=tag><STRONG><FONT color=#006699>></FONT></STRONG></SPAN><SPAN>show_one(); </SPAN></SPAN><LI class=""><SPAN></SPAN><SPAN class=tag><STRONG><FONT color=#006699>?></FONT></STRONG></SPAN><SPAN> </SPAN></SPAN></LI></OL>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号