首頁  >  文章  >  後端開發  >  第十三節 物件串列化 [13]_PHP教程

第十三節 物件串列化 [13]_PHP教程

WBOY
WBOY原創
2016-07-21 16:10:27915瀏覽


串列化可以把變數包括物件,轉換成連續bytes資料. 你可以將串列化後的變數存在一個檔案或在網路上傳輸. 然後再反串列化還原為原來的資料. 你在反串行化類別的物件之前定義的類別,PHP可以成功地儲存其物件的屬性和方法. 有時你可能需要一個物件在反串行化後立即執行. 為了這樣的目的,PHP會自動尋找__sleep和_ _wakeup方法.

當一個物件被串列化,PHP會呼叫​​__sleep方法(如果存在的話). 在反串列化一個物件後,PHP 會呼叫__wakeup方法. 這兩個方法都不接受參數. __sleep方法必須傳回一個陣列,包含需要串列化的屬性. PHP會拋棄其它屬性的值. 如果沒有__sleep方法,PHP將保存所有屬性.

範例6.16顯示如何用__sleep和__wakeup方法來串行化一個物件. Id屬性是一個不打算保留在物件中的臨時屬性. __sleep方法保證在串行化的物件中不包含id屬性. 當反串行化一個User物件,__wakeup方法建立id屬性的新值. 這個例子被設計成自我保持. 在實際開發中,你可能發現包含資源(如圖像或資料流)的物件需要這些方法.

Listing 6.16 Object serialization

class User
{
public $name;
public $id;

function __construct()
{
//give user a unique ID 給予一個不同的ID
$this->id = uniqid();
}

function __sleep()
{
//do not serialize this-> id 不串列化id
return(array("name"));
}

function __wakeup()
{
//give user a unique ID
$this->id = uniqid();
}
}

//create object 建立一個物件
$u = new User;
$u->name = " Leon";

//serialize it 串列化注意不串列化id屬性,id的值被拋棄
$s = serialize($u);

//unserialize it 反串列化id被重新賦值
$u2 = unserialize($s);

//$u and $u2 have different IDs $u和$u2有不同的ID
print_r ($u);
print_r($u2);
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314231.htmlTechArticle序列化可以把變數包含物件,轉換成連續bytes資料. 你可以將串列化後的變數存在一個檔案或在網路上傳輸. 然後再反串列化還原為原來的數...
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn