程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 在數據庫中使用對象的好處

在數據庫中使用對象的好處

編輯:關於PHP編程

我們都知道如何從Mysql獲取我們需要的行(記錄),讀取數據,然後存取一些改動。很明顯也很直接,在這個過程背後也沒有什麼拐彎抹角的。然而對於我們使用面對對象的程序設計(OOP)來治理我們數據庫中的數據時,這個過程就需要大大改進一下了。這篇文章將對如何設計一個面對對象的方式來治理數據庫的記錄做一個簡單的描述。你的數據當中的所有內部邏輯關系將被封裝到一個非常條理的記錄對象,這個對象能夠提供專門(專一)的確認代碼系統,轉化以及數據處理。隨著Zend Engine2 和PHP5的發布,PHP開發者將會擁有更強大的面對對象的工具來輔助工作,這將使這個過程(面對對象地治理數據庫)更有吸引力。

以下列出了一些使用對象來描敘你的數據庫的有利方面:
存取方法(Accessor methods)將會使你對屬性的讀取和寫入過程做到完全的控制
每一級的每個記錄和屬性(的操作)都有確認過程
從關系表中智能的獲取對象
重復使用的邏輯方法意味著所有的數據交互都要通過相同的基礎代碼(codebase),這將使維護變得更加簡單
代碼簡單,因為不同的記錄的內部邏輯都已經包含在各自所處的類(class)當中,而不是繁瑣的庫(lib)文件
在手工編寫代碼和SQL查詢語句時,出錯的機會將更少

存取方法(Accessor methods)

存取方式是通過類給實例(instance)的變量賦值。一個例子,我有一個叫User的類,並且有一個實例$username,我會寫這樣的存取方法(函數),User->username()和User->setUsername()用來返回和給實例賦值。

<?php
class User {
var $username;

function username() {
return $this->username;
}

function setUsername($newUsername) {
$this->username = $newUsername;
}
}
?>

這裡有很好的理由讓我們編寫這樣的“非凡的代碼”。它將使開發者更靈活的改變類的繁瑣的工作,因為這一過程將不需要其他的使用類的php代碼。讓我們來看看下面這個更加完善的可信賴的User類。
變量$username將不復存在,所有的東西都被整合的放在數組$_data當中
假如username是空的話,username()函數將提供一個缺省(默認)的值給它
setUsername()過程將在接受值之前確認username是否合乎標准格式(如字長等)

<?php
class User {
var $_data = array(); // associative array containing all the attributes for the User

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的信息,以上代碼的變化將會破壞他的代碼。然而我們可以使用(類的)存取方法,就像上面代碼中注釋的那樣,添加一個驗證的功能而不需要改變任何其他的東西。注重username的驗證(例子當中是不能超過12字節)代碼是獨立在setUsername()方法之外的。從驗證到存儲到數據庫的過程輕而易舉。而且,這是個非常好的單憑經驗的方法,一個方法或一個類需要做的越少,它的重復使用的機會將會越大。這在你開始寫一個子類時更加明顯,假如你需要一個子類,並且又要跳過(忽略)父類方法(行為)中的一些非凡的細節,假如(針對這個細節的)方法很小而又精細,(修改它)只是一瞬間的過程,而假如這個方法非常臃腫,針對多種目的,你可能將在復制子類中大量代碼中郁悶而終。

比方說,假如Admin是User類的一個子類。我們對adamin的用戶可能會有不同的,相對苛刻一些的密碼驗證方法。最好是跨過父類的驗證方法和整個setUsername()方法(在子類中重寫)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved