觸發事件:對象被序列化以前php
做用:返回須要被序列化存儲的成員屬性,刪減沒必要要數組
返回:array 須要被序列化存儲的成員屬性數組函數
觸發事件:類的實例的序列化串被反序列化時this
做用:預先準備對象資源spa
返回:voidcode
實例:對象
<?php class Person { private $name, $age, $sex, $info; public function __construct( $name, $age, $sex ) { $this->name = $name; $this->age = $age; $this->sex = $sex; $this->info = sprintf("prepared by construct magic functionname: %s age: %d sex: %s", $this->name, $this->age, $this->sex); } public function getInfo() { echo $this->info . PHP_EOL; } /** * serialize前調用 用於刪選須要被序列化存儲的成員變量 * @return array [description] */ public function __sleep() { echo __METHOD__ . PHP_EOL; //序列化時只會存儲 name age sex, info 不會被序列化 return ['name', 'age', 'sex']; } /** * unserialize前調用 用於預先準備對象資源 */ public function __wakeup() { echo __METHOD__ . PHP_EOL; $this->info = sprintf("prepared by wakeup magic function name: %s age: %d sex: %s", $this->name, $this->age, $this->sex); } } $boy = new Person( 'sallency', 25, 'male' ); //構造函數組裝的 $info $boy->getInfo(); //序列化時並不會存儲 $info 屬性 $temp = serialize($boy); echo $temp . PHP_EOL; //反序列化時會調用 __wakeup() 函數 $boy = unserialize($temp); //__wakeup() 組裝的 $info $boy->getInfo(); ?>