PHP 物件的儲存與傳輸(序列化serialize 物件)
物件的儲存與傳輸
在實際專案應用中,有些任務在一兩個頁面是無法完成的,由於變數到腳本執行完畢就釋放,我們本頁所產生的物件想在其它頁面使用時便碰到了麻煩。
如果需要將物件及其方法傳遞到我們想使用物件的頁面,比較簡單可行的辦法是將物件序列化後儲存起來或直接傳輸給所需的頁面,另一種方法是將物件註冊為session 變量。
序列化物件
物件序列化,就是將物件轉換成可以儲存的位元組流。當我們需要把一個物件在網路中傳輸時或要把物件寫入檔案或是資料庫時,就需要將物件進行序列化。
序列化完整過程包括兩個步驟:一個是序列化,就是把物件轉化為二進位的字串,serialize() 函數用來序列化一個物件;另一個是反序列化,就是把物件被序列轉化的二進位字串再轉換為對象,unserialize() 函數來反序列化一個被序列化的物件。這樣整個過程下來,物件內的型別結構及資料都是完整的。
語法:
string serialize( mixed value )
mixed unserialize( string str [, string callback] )
範例:"Person":2:{s:12:" Person name";s:4:"張三";s:11:" Person age";i:20;}
但通常不會直接解析上述序列化生成的字元。
反序列化:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $p1 = new Person("张三", 20); $p1_string = serialize($p1); //将对象序列化后写入文件 $fh = fopen("p1.text", "w"); fwrite($fh, $p1_string); fclose($fh); ?>
運行該例子,輸出:
我的名字是:張三
我的年齡是:20
我的年齡是:20