1.string serialize ( mixed $value )— 产生一个可存储的值的表示
serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。
这有利于存储或传递 PHP 的值,同时不丢失其类型和结构
想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()
@ 序列化数组
serialize($arr);
在设置cookie的时候可以通过序列化数组的形式传递多个值,然后在接收页面进行反序列化读取
@ 序列化对象
class ren{ private $name; private $age; function __construct($name,$age){ $this->name =$name; $this->age = $age; } function show(){ echo "姓名是:{$this->name} 年龄是:{$this->age}"; } function __sleep(){ //魔术函数 指定序列化那些内容,以数组形式返回,不定义则全部序列化 return array(‘name‘,‘age‘); //return array_keys(get_object_vars($this)); } } $zao = new ren("赵六",44); echo serialize($zao);
__sleep() 序列化函数调用时自动执行的函数,可以限定要序列化的属性
2.mixed unserialize ( string $str [, string $callback ] ) — 从已存储的表示中创建 PHP 的值
unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
返回的是转换之后的值,可为 integer、float、string、array 或 object。如果传递的字符串不可解序列化,则返回 FALSE
备注:
对象序列化后,只是序列化存储的对象的属性,方法没有被序列化(因为方法是属于类的,不属于单个对象)
反序列化时,只是把属性反序列化,可使用__wakeup()魔术函数,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。
对象序列化
class db { private $host; private $user; private $pwd; private $dbname; private $mysqli; function __construct($host, $user, $pwd, $dbname) { $this->host = $host; $this->user = $user; $this->pwd = $pwd; $this->dbname = $dbname; $this->db(); } function db() { $this->mysqli = new mysqli ( $this->host, $this->user, $this->pwd, $this->dbname ); } function select() { $this->mysqli->query("SET CHARSET GBK"); $sql = "SELECT id,cname FROM hdw_channel"; $result = $this->mysqli ->query ( $sql ); $rows = array (); while ( $row = $result->fetch_assoc () ) { $rows [] = $row; } ECHO "<PRE>"; print_r ( $rows ); } function __wakeup(){ //反序列化自动运行链接数据库 $this->db(); } } session_start(); $chanel = new db("localhost",‘root‘,‘‘,‘hdcms‘); //$chanel->select(); $_SESSION[‘channel_obj‘] = serialize($chanel);
接收页面,反序列化
session_start(); include ‘59.php‘; //载入此类文件 $channel_obj=unserialize($_SESSION[‘channel_obj‘]); 反序列化对象 $channel_obj->select();
__wakeup() 魔术函数 当反序列化时自动调用(如果类内已经定义)
时间: 2024-10-12 04:02:21