我們習慣從 MySQL 取出所需的記錄、讀取資料、修改後存回,這過程直觀且直接。但當我們引入物件導向程式設計(OOP)來管理資料庫資料時,流程便需大幅改進。本文將探討如何以物件導向方式設計資料庫記錄的管理,將資料內部的邏輯關係封裝進結構清晰的記錄物件,提供專屬的驗證、轉換與資料處理機制。隨著 Zend Engine 2 和 PHP 5 的釋出,PHP 開發者擁有更強大的 OOP 工具,使這一過程更具吸引力。
存取方法是透過類別對實例變數賦值。以 User 類別為例,擁有 $username 實例,我們撰寫 User->username() 取值、User->setUsername() 賦值。
<?php
class User {
var $username;
function username() {
return $this->username;
}
function setUsername($newUsername) {
$this->username = $newUsername;
}
}
?>
將變數整合於 $_data 陣列,提供預設值、格式驗證(如長度限制),並拋出異常:
<?php
class User {
var $_data = array(); // 關聯陣列,儲存所有屬性
function username() {
return !empty($this->_data['username']) ? $this->_data['username'] : '(no name!)';
}
function setUsername($newUsername) {
if ($this->validateUsername($newUsername)) {
$this->_data['username'] = $newUsername;
}
}
function validateUsername(&$someName) {
if (strlen($someName) > 12) {
throw new Exception('Your username is too long'); // PHP5 only
}
return true;
}
}
?>
若程式員直接存取 username,上述修改會破壞其代碼;但使用存取方法,我們可在不變更其他代碼的情況下加入驗證。驗證邏輯獨立於 setUsername(),符合「單一職責」原則,方法越小越精細,重用機會越大。繼承時,子類別(如 Admin)僅需覆寫特定驗證方法,無需複製龐大父類別代碼,極大降低維護成本。
將資料庫記錄模型化為物件,不僅提升代碼組織與可維護性,更賦予資料操作強大的驗證與擴充能力。善用 PHP 5 的 OOP 特性,能讓資料庫交互更安全、優雅。