批改状态:未批改
老师批语:
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));//反序列化点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号