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 )
原文:http://my.oschina.net/dandinglong/blog/518269