### 概述
也叫作对象的串行化!对象也是一种数据类型,既然是数据,就存在着被持久化存储的问题 .
也就说,对象的序列化与反序列化就是解决对象的持久化存储的问题!
### 数据的存储
也就是数据被持久化!一般的,可以将数据存放到数据库或者文件磁盘介质中!
当PHP脚本运行结束的时候,内存中的数据都会丢失,脚本的资源也都会消失(包括脚本中的数据),所以,如果想实现数据存储,就应该在脚本运行结束之前进行数据的持久化!
### 直接持久化带来的问题
布尔值false被转换为 "" ,数值型被转换为字符串型 .
只要存储的是不为字符串型数据,那么取出来的数据都有可能出现问题!
### 如何解决这个问题
应该在将数据自动转换成字符串的时候,同时在字符串内记录原数据的值和类型等相关的信息,
目的就是在得到数据的时候,能根据存储的信息(包含数据类型)转换成原始数据!
这个工作就是由数据的序列化与反序列化来完成的!
### 数据的序列化与反序列化
#### 序列化
将原始数据转换成可以用于保存和传输的字符串数据!(不仅仅记录原数组的值,还记录原数据的类型等相关信息)
#### 反序列化
将序列化后的字符串数据,转换成原始数据!
### 通过两个函数来完成
* serialize():序列化
* unserialize():反序列化
### 实例
~~~
class Person{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
$p = new Person("jack", '20');
$data = serialize($p);
var_dump($data);
file_put_contents('./1.txt', $data);
$data = unserialize(file_get_contents('./1.txt'));
var_dump($data);
~~~
~~~
string(58) "O:6:"Person":2:{s:4:"name";s:4:"jack";s:3:"age";s:2:"20";}" //序列化
~~~
~~~
object(Person)#2 (2) { ["name"]=> string(4) "jack" ["age"]=> string(2) "20" } //反序列化
~~~
- PHP加密技术
- md5加密
- Crypt加密
- 函数
- 概述
- 强类型参数
- 可变参数列表
- 值传递&引用传递
- 变量作用域
- 可变函数
- 嵌套函数
- 递归函数
- 匿名函数(闭包)
- 面向对象
- 概念
- 类
- 对象的传值
- 对象的克隆
- 构造方法
- 析构方法
- 克隆方法
- $this
- 类常量
- 静态属性
- 静态方法
- 继承
- 重写
- 重载
- 概述
- 属性重载
- 概述
- __set()
- __get()
- __unset()
- __isset()
- 方法重载
- 概述
- __call()
- __callstatic()
- 封装
- 最终类
- 抽象类
- 接口
- 对象的序列化与反序列化
- __sleep()
- __wakeup()
- 其他魔术方法
- 对象的遍历
- 类和对象相关函数
- 错误
- 概述
- 设置错误级别
- trigger_error()触发错误
- 处理PHP中的错误
- 异常
- 概述
- 自定义异常类
- 自定义文件写入异常类
- 记录和发送异常信息
- 使用观察者模式处理异常信息
- 自定义异常处理器
- 设计模式
- 创建型
- 单例模式
- 工厂模式
- 原型模式
- 结构型
- 注册树模式
- 适配器模式
- 数据映射模式
- 装饰器模式
- 代理模式
- 行为型
- 策略模式
- 观察者模式
- 迭代器模式
- 网络
- cURL
- Oauth2.0
- QQ第三方登录
- TCP/IP协议
- 概述
- HTTP协议
- 概述
- HTTP请求协议
- HTTP响应协议
- WebSocket
- 安装扩展
- Redis
- Socket
- 计算机通信
- socket简介
- PHP操作socket
- TCP
- HTTP服务端
- WebSocket
- PHP7
- 生成器yield
- 异常finally
- CGI和FPM
- php有用命令
- 内存