PHP串行化可以把变量包括对象,转化成连续bytes数据,你可以将串行化后的变量存在一个文件里或在网络上传输,然后再反串行化还原为原来的数据。
什么时候使用串行化? 在网络中传输对象的时候 向数据库中保存文件的时候。
全部串行化
1.serialize(对象名) 将指定的类对象串行化 $str=serialize($per) //将per对象串行化,结果返回给$str
2.unserialize(串行化后的返回值) 返回结果是对象 $per=unserialize($str);
局部串行化
3.__sleep() 串行化某对象的部分属性。
4.__wakeup()反串行化时,初始化(其实是修改)对象内容
serialize 串行化与反串行化
class person{
public $name;
public $age;
public function __construct($name,$age){
$this->name = $name;
$this->age = $age;
}
}
$p = new person('lisi',15);
$str = serialize($p); //串行化,存储对象
setcookie('class',$str); //串行化的内容可以存储在cookie或者传给其他页面
$unstr = unserialize($_COOKIE['class']); //反串行化
echo $unstr->name;
局部串行化 __sleep() __wakeup()
__sleep() 串行化某对象的部分属性。
__wakeup()反串行化时,初始化(其实是修改)对象内容
class person{
public $name;
public $age;
public $sex;
public function __construct($name,$age,$sex){
$this->name = $name;
$this->age = $age;
$this->sex = $sex;
}
public function say(){
echo 'I am '.$this->name.', '.$this->age.' years, '.$this->sex;
}
public function __sleep(){
$arr = array("name","age");
return $arr;
}
public function __wakeup(){
$this->age = 20;
}
}
$p = new person('lisi',15,'boy');
$str = serialize($p); //串行化,存储对象
$unstr = unserialize($str);
echo $unstr->say();
