本文探討 PHP 4 中的高級面向對象技術:對象序列化機制、基於類的數據存儲模式、對象拷貝與克隆實現。
PHP 不支持持久對象,但提供 serialize() / unserialize() 保存對象成員數據(不含方法)。
<?php
$obj = new Classfoo();
$str = serialize($obj); // 保存字符串到文件/數據庫
// 後續腳本中
$obj2 = unserialize($str); // 恢復成員數據
?>
注意:反序列化後無法調用方法(官方文檔無保證),僅可訪問屬性。建議僅用於數據持久化,不依賴方法恢復。
定義基類 Product,派生 SoundItem、ViewableItem 等,覆蓋 display() 方法。根據數據庫 type 字段動態實例化:
<?php
$obj = new $type(); // $type 來自數據庫
$obj->action(); // 統一調用,無需 if/else
?>
優勢:新增產品類型只需添加類,主邏輯零修改,符合開閉原則,便於團隊分工與國際化擴展。
$obj2 = $obj 為淺拷貝(複製當前狀態)。若需創建同類新實例,可用 new ClassName() 或基於序列化的通用克隆方法:
<?php
class Universe {
function clone() {
$herring = serialize($this);
$vec = explode(':', $herring);
$nam = str_replace('"', '', $vec[2]); // 解析類名
return new $nam(); // 調用構造函數創建新實例
}
}
$obj = new Something(); // 繼承 Universe
$other = $obj->clone(); // 獲得全新 Something 實例
?>
此技巧利用序列化字符串中包含類名特性,實現無需硬編碼的克隆工廠。