serialize()就是将PHP中的变量如对象(object),数组(array)等等的值序列化为字符串后存储起来.序列化的字符串我们可以存储在其他地方如数据库、Session、Cookie等,序列化的操作并不会丢失这些值的类型和结构。这样这些变量的数据就可以在PHP页面、甚至是不同PHP程序间传递了。
当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数
-----------------------------------------------------------------------------------------
unserialize()就是把序列化的字符串转换回PHP的值。
unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE。
实例
class Db { //连接参数与返回值 public $db = null; public $host; public $user; public $pass; //构造方法 public function __construct($host='127.0.0.1', $user='root', $pass='root') { $this->host = $host; $this->user = $user; $this->pass = $pass; // 确保实例化对象的时候能自动连接上数据库 $this->connect(); } //数据库连接 private function connect() { $this->db=mysqli_connect($this->host,$this->user,$this->pass); } //对象序列化的时候自动调用 public function __sleep() { return ['host','user','pass']; } //反序列化: public function __wakeup() { $this->connect(); } } $obj = new Db(); /** * 对象序列化的特点: * 1. 只保存对象中的属性,不保存方法 * 2. 只保存类名,不保存对象名 */ echo serialize($obj),'<hr>'; $tmp = serialize($obj);//将序列化的结果保存到tmp中 var_dump(unserialize($tmp));//反序列化
运行实例 »
点击 "运行实例" 按钮查看在线实例