用serialize() 函数实例化一个类的时候会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。__sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。
魔术方法__wakeup:
与serialize()相反,unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
<?php
//串行化存入object.txt文档
class Person{
public $name = "Feiyu";
public $age = 22;
public $sex = "nan";
public function say(){
echo $this->name."<hr/>".$this->age."<hr/>".$this->sex;
}
}
$p = new Person;
$p->name = "老张";
$p->age = 50;
$p->sex = "nan";
$p->say();
echo "<hr/>";
$str = serialize($p);
file_put_contents("object.txt",$str);
生成
<?php
//返串行化
class Person{
public $name = "Feiyu";
public $age = 22;
public $sex = "nan";
public function say(){
echo $this->name."<hr/>".$this->age."<hr/>".$this->sex;
}
//就如同一个模板
// 拓展
public function sleep(){
echo "sleep";
}
}
$str = file_get_contents("object.txt");
//对一个对象反序列化的时候 必须要有原对象在场
$obj = unserialize($str);
$obj->say();
echo "<hr/>";
$obj->sleep();
echo "<hr/>";
就像是开始时候做的留言板 存入的 txt 文档 同样可以存入数据库 一个存入 Put 一个取出get过程 取出时必须用原型类
<?php
class Apple{
public $dy; //电源线
public $pm; //屏幕
public $cpu; //cpu
public $men; //内存
public $baoxiu; //保修期
public function code(){
echo "敲代码";
}
public function play(){
echo "看电影";
}
public function chat(){
echo "聊天";
}
//可以保住我们将所需要的成员属性序列化
public function __sleep(){
//返回序列化属性
return array('dy','baoxiu');
}
}
$apple = new Apple;
$apple->baoxiu = 1;
$str = serialize($apple);
file_put_contents('apple.txt',$str);
<?php
header("content-type:text/html;charset=utf-8");
class Apple{
public $dy; //电源线
public $pm; //屏幕
public $cpu; //cpu
public $men; //内存
public $baoxiu; //保修期
public function code(){
echo "敲代码";
}
public function play(){
echo "看电影";
}
public function chat(){
echo "聊天";
}
//可以保住我们将所需要的成员属性序列化
public function __sleep(){
//返回序列化属性
return array('dy','baoxiu');
}
//当反序列化的时候自动将保修期回改回为3年
public function __wakeup(){
$this->dy = "崭新的二手电源";
$this->baoxiu = 3;
}
}
$apple = new Apple;
$apple->baoxiu = 1;
$str = serialize($apple);
file_put_contents('./apple.txt',$str);
// 接收包裹
file_get_contents("./apple.txt");
//把包裹打开
$obj = unserialize($str);
$obj->dy = "崭新的二手电源";
echo "<pre>";
var_dump($obj);
echo "</pre>";
//为完成对象 拿过上个类对象