<?php
/*
当一个对象被串行化,PHP会调用__sleep方法(如果存在),在反串行化一个对象后,php会调用__wakeup方法,这两个方法都不接受参数
__sleep方法必须返回一个数组,包含需要串行化的属性,php会抛弃其他属性的值,
如果没有__sleep方法,php将保存所有属性。
如果使用会话并使用了session_register()来注册对象,这些对象会在每个PHP页面
结束时被自动序列化,并在接下来的每个页面中自动解序列化,也就是说对象一旦成为
会话的一部分,就能在任何页面中出现。
*/
class Persion
{
public $name;
public $id;
function __construct()
{//赋予一个不同的ID
$this->id = uniqid();
}
function __sleep()
{
//不串行化 id
return (array("name"));
//串行化
return (array("name","id"));
}
function __wakeup()
{
//赋予一个不同的id
$this->id = uniqid();
}
}
$u = new Persion;
$u->name = 'Lily';
echo'<pre>'; print_r($u); echo '</pre>';
$s = serialize($u);
echo'<pre>'; print_r($s); echo '</pre>';
$u2 = unserialize($s);
/*
当一个对象被串行化,PHP会调用__sleep方法(如果存在),在反串行化一个对象后,php会调用__wakeup方法,这两个方法都不接受参数
__sleep方法必须返回一个数组,包含需要串行化的属性,php会抛弃其他属性的值,
如果没有__sleep方法,php将保存所有属性。
如果使用会话并使用了session_register()来注册对象,这些对象会在每个PHP页面
结束时被自动序列化,并在接下来的每个页面中自动解序列化,也就是说对象一旦成为
会话的一部分,就能在任何页面中出现。
*/
class Persion
{
public $name;
public $id;
function __construct()
{//赋予一个不同的ID
$this->id = uniqid();
}
function __sleep()
{
//不串行化 id
return (array("name"));
//串行化
return (array("name","id"));
}
function __wakeup()
{
//赋予一个不同的id
$this->id = uniqid();
}
}
$u = new Persion;
$u->name = 'Lily';
echo'<pre>'; print_r($u); echo '</pre>';
$s = serialize($u);
echo'<pre>'; print_r($s); echo '</pre>';
$u2 = unserialize($s);
echo'<pre>'; print_r($u2); echo '</pre>';