### 概述
也叫作對象的串行化!對象也是一種數據類型,既然是數據,就存在著被持久化存儲的問題 .
也就說,對象的序列化與反序列化就是解決對象的持久化存儲的問題!
### 數據的存儲
也就是數據被持久化!一般的,可以將數據存放到數據庫或者文件磁盤介質中!
當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有用命令
- 內存