首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 面向物件程式設計(四):序列化機制與物件持久化

     編輯:PHP 相關知識

序列化基本概念

PHP 不支援原生永久物件(跨請求保持狀態),但提供 serialize() / unserialize() 將物件轉為字串儲存(檔案/資料庫/Session),後續還原。

核心限制

  • 僅儲存成員屬性,不包含方法。
  • PHP 4 中反序列化後仍可呼叫方法,但官方文檔不保證此行為持續,強烈不建議依賴。
  • 反序列化後物件實際上只有屬性資料,呼叫方法會報錯。

基本用法

<?php
$obj = new ClassFoo();
$str = serialize($obj); // 產生字串

// 儲存 $str 到檔案/資料庫
// ... 時間經過 ...

$str = file_get_contents('storage.dat');
$obj2 = unserialize($str); // 還原屬性

// 僅能透過 $obj2->property 存取屬性,無法呼叫方法
?>

進階解決方案(概念)

  1. __sleep / __wakeup 魔術方法:自定義序列化/反序列化行為(如關閉資源連線、重新建立連線)。
  2. 儲存類名 + 工廠模式:序列化時保存 __CLASS__,反序列化時由工廠根據類名實例化完整物件。
  3. JSON/陣列替代:僅序列化純資料陣列,業務邏輯保留在 Service 層,避免物件序列化複雜度。

最佳實踐建議

  • Session 中儲存純量/陣列資料,避免直接存物件。
  • 跨服務傳輸使用 JSON/API 契約,不依賴 PHP 原生序列化。
  • 若必須序列化物件,實作 Serializable 介面並嚴格測試版本兼容性。

轉載自 PHPBuilder.com,譯者 limodou。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved