__sleep() 和 __wakeup()
public array __sleep ( void )
void __wakeup ( void )
serialize() 函數會檢查類中是否存在一個魔術方法 __sleep()。如果存在,該方法會先被調用,然后才執行序列化操作。此功能可以用于清理對象,并返回一個包含對象中所有應被序列化的變量名稱的數組。如果該方法未返回任何內容,則 NULL 被序列化,并產生一個 E_NOTICE 級別的錯誤。
示例: class user { public $name; public $id; function __construct() { // 給id成員賦一個uniq id $this->id = 'asas'; } function __sleep() { //此處不串行化id成員 return(array('name')); } function __wakeup() { $this->id = uniqid(); }}$u = new user();$u->name = "Leo";$s = serialize($u); //serialize串行化對象u,此處不串行化id屬性,id值被拋棄$u2 = unserialize($s); //unserialize反串行化,id值被重新賦值//對象u和u2有不同的id賦值print_r($u);print_r($u2);
結果:
user Object ( [name] => Leo [id] => asas ) user Object ( [name] => Leo [id] => 5621ed9f6614c )
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!