最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php面向?qū)ο笕ヂ?(十六) 對象的串行化

 更新時間:2009年09月30日 22:42:03   作者:  
有時候需要把一個對象在網(wǎng)絡(luò)上傳輸,為了方便傳輸,可以把整個對象轉(zhuǎn)化為二進(jìn)制串.
把對象串行化
有時候需要把一個對象在網(wǎng)絡(luò)上傳輸,為了方便傳輸,可以把整個對象轉(zhuǎn)化為二進(jìn)制串,
等到達(dá)另一端時,再還原為原來的對象,這個過程稱之為串行化,就像我們現(xiàn)在想把一輛汽
車通過輪船運(yùn)到美國去,因?yàn)槠嚨捏w積比較大,我們可以把汽車拆開成小的部件,然后我們把這些部件通過輪般運(yùn)到美國去,到了美國再把這些部件組裝回汽車。
有兩種情況我們必須把對象串行化,第一種情況就是把一個對象在網(wǎng)絡(luò)中傳輸?shù)臅r候要
將對象串行化,第二種情況就是把對象寫入文件或是數(shù)據(jù)庫的時候用到串行化。
串行化有兩個過程,一個是串行化,就是把對象轉(zhuǎn)化為二進(jìn)制的字符串,我們使用
serialize()函數(shù)來串行化一個對象,另一個是反串行化,就是把對象轉(zhuǎn)化的二進(jìn)制字符串再轉(zhuǎn)
化為對象, 我們使用unserialize()函數(shù)來反串行化一個對象。
PHP 中serialize()函數(shù)的參數(shù)為對象名,返回值為一個字符串,Serialize()返回的字符串
含義模糊,一般我們不會解析這個串來得到對象的信息,我們只要把返回來的這個字符串傳
到網(wǎng)絡(luò)另一端或是保存到方件中即可。
PHP 中unserialize()函數(shù)來反串行化對象,這個函數(shù)的參數(shù)即為serialize()函數(shù)的返回值,
輸出當(dāng)然是重新組織好的對象。代碼片段
復(fù)制代碼 代碼如下:

<?
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個人可以說話的方法, 說出自己的屬性
function say() {
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
}
$p1=new Person("張三", "男", 20);
$p1_string=serialize($p1); //把一個對象串行化,返一個字符串
echo $p1_string."<br>"; //串行化的字符串我們通常不去解析
$p2=unserialize($p1_string); //把一個串行化的字符串反串行化形成對象$p2
$p2->say();
?>

上例輸出結(jié)果:
代碼片段
O:6:"Person":3:{s:4:"name";s:4:"張三";s:3:"sex";s:2:"男";s:3:"age";i:20;}
我的名子叫:張三性別:男我的年齡是:20
在php5 中有兩個魔術(shù)方法__sleep()方法和__wakeup()方法,在對象串行化的時候,會調(diào)用
一個__sleep()方法來完成一些睡前的事情;而在重新醒來,即由二進(jìn)制串重新組成一個對象
的時候,則會自動調(diào)用PHP 的另一個函數(shù)__wakeup(),做一些對象醒來就要做的動作。
__sleep()函數(shù)不接受任何參數(shù),但返回一個數(shù)組,其中包含需要串行化的屬性。末被包
含的屬性將在串行化時被忽略,如果沒有__sleep()方法,PHP 將保存所有屬性。
代碼片段
復(fù)制代碼 代碼如下:

<?
class Person{
//下面是人的成員屬性
var $name; //人的名子
var $sex; //人的性別
var $age; //人的年齡
//定義一個構(gòu)造方法參數(shù)為屬性姓名$name、性別$sex和年齡$age進(jìn)行賦值
function __construct($name="", $sex="", $age=""){
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
//這個人可以說話的方法, 說出自己的屬性function say()
{
echo "我的名子叫:".$this->name." 性別:".$this->sex." 我的年齡是:".$this->age."<br>";
}
//指定串行化時把返回的數(shù)組中$name和$age值串行化,忽略沒在數(shù)組中的屬性$sex
function __sleep() {
$arr=array("name", "age");
return($arr);
}
//重新生成對象時,并重新賦值$age為40
function __wakeup() {
$this->age = 40;
}
}
$p1=new Person("張三", "男", 20);
//把一個對象串行化,返一個字符串,調(diào)用了__sleep()方法,忽略沒在數(shù)組中的屬性$sex
$p1_string=serialize($p1);
echo $p1_string."<br>"; //串行化的字符串我們通常不去解析
$p2=unserialize($p1_string); //反串行化形成對象$p2重新賦值$age為40
$p2->say();
?>

上例輸出值為:
執(zhí)行結(jié)果
O:6:"Person":2:{s:4:"name";s:4:"張三";s:3:"age";i:20;}
我的名子叫:張三性別:我的年齡是:40

相關(guān)文章

最新評論

麻阳| 孟津县| 鲜城| 神农架林区| 平原县| 林州市| 周宁县| 绍兴县| 上饶县| 繁峙县| 灵台县| 平利县| 湛江市| 余干县| 巴楚县| 西城区| 商洛市| 建阳市| 阜新市| 云和县| 福海县| 鄢陵县| 平遥县| 汝阳县| 南汇区| 海南省| 怀来县| 前郭尔| 佳木斯市| 贵州省| 江口县| 永登县| 竹山县| 和平区| 平塘县| 开阳县| 宣汉县| 福清市| 灵寿县| 马关县| 潍坊市|