簡簡單單PHP對象序列化學(xué)習(xí)
PHP還是比較常用的,于是我研究了一下PHP對象序列化,在這里拿出來和大家分享一下,希望對大家有用。PHP對象序列化也是一個比較普遍的功能,能夠把一個對象進行串行化以后變成一個字符串,能夠保存或者傳輸。我們先看一個例子:
- classTestClass
- {
- var$a;
- var$b;
- functionTestClass()
- {
- $this->a="Thisisa";
- $this->b="Thisisb";
- }
- functiongetA()
- {
- return$this->a;
- }
- functiongetB()
- {
- return$this->b;
- }
- }
- $obj=newTestClass;
- $str=serialize($obj);
- echo$str;
輸出結(jié)果:
- O:9:"TestClass":2:{s:1:"a";s:9:"Thisisa";s:1:"b";s:9:"Thisisb";}
我們來分析一個對象串行化之后的字符串。
- O:9:"TestClass":2:
- {
- s:1:"a";s:9:"Thisisa";
- s:1:"b";s:9:"Thisisb";
- }
#T#首先看對于對象本身的內(nèi)容:O:9:"TestClass":2:O是說明這是一個對象類型(object),然后9是代表對象的名字查過濃度,2是代表該對象有幾個屬性。在看兩個屬性的內(nèi)容:s:1:"a";s:9:"Thisisa";其實跟數(shù)組的內(nèi)容比較類似,第一項:s:1:"a";是描述屬性名稱的,第二項s:9:"Thisisa";是描述屬性值的。后面的屬性類似。先說一種PHP對象序列化的應(yīng)用,下面的內(nèi)容是PHP手冊上,沒有更改原文。serialize()返回一個字符串,包含著可以儲存于PHP的任何值的字節(jié)流表示。unserialize()可以用此字符串來重建原始的變量值。用序列化來保存對象可以保存對象中的所有變量。對象中的函數(shù)不會被保存,只有類的名稱。
要能夠unserialize()一個對象,需要定義該對象的類。也就是,如果序列化了page1.php中類A的對象$a,將得到一個指向類A的字符串并包含有所有$a中變量的值。如果要在page2.php中將其解序列化,重建類A的對象$a,則page2.php中必須要出現(xiàn)類A的定義。這可以例如這樣實現(xiàn),將類A的定義放在一個包含文件中,并在page1.php和page2.php都包含此文件。
- <?php
- //classa.inc:
- classA
- {
- var$one=1;
- functionshow_one()
- {
- echo$this->one;
- }
- }
- //page1.php:
- include("classa.inc");
- $a=newA;
- $s=serialize($a);
- //將$s存放在某處使page2.php能夠找到
- $fp=fopen("store","w");
- fputs($fp,$s);
- fclose($fp);
- //page2.php:
- //為了正常解序列化需要這一行
- include("classa.inc");
- $s=implode("",@file("store"));
- $a=unserialize($s);
- //現(xiàn)在可以用$a對象的show_one()函數(shù)了
- $a->show_one();
- ?>