💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 概述 也叫作对象的串行化!对象也是一种数据类型,既然是数据,就存在着被持久化存储的问题 . 也就说,对象的序列化与反序列化就是解决对象的持久化存储的问题! ### 数据的存储 也就是数据被持久化!一般的,可以将数据存放到数据库或者文件磁盘介质中! 当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" } //反序列化 ~~~