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();