利用PHP的OOP特性實現資料保護(1 )

日期:2006-09-28  作者:喜騰小二  來源:PHPChina


  在PHP 4中,宣告變數通常使用var,而在PHP
5中,可使用麵嚮物件編程(OOP)的特性來自訂資料的可見性--即可訪問性,可見性在此與變數作用域非常類似,但提供了更好的控制機制,有以下三種類型的可見性修飾符:


  Public(預設)--變數可在全域範圍內訪問或修改。
  Protected--變數隻能在類本身及直接派生(使用extends陳述式)類內訪問或修改。
  Private--變數隻能在類內部訪問或修改。

  與介麵實現類似,在程式中違反這些規則將會導緻嚴重的錯誤;且與介麵類似的是,它們的存在純粹是為了方便程式設計人員。但這並不意味着可以略過它們,指定某個類成員變數的可見性,可保護物件內的資料免受外界影響。

  假設有一個MySqlDB類,一個$link變數在其中宣告為private,這意味着這個變數隻能從物件內部使用$this變數訪問,這防止了類外其他物件或函式的意外覆蓋,在此,我們將使用可見性特性說明我們建立一個query物件。

  妳可以把query當作一個單獨的實體,它可以執行,並且返回結果。一些資料庫係統也俱有存儲過程,存儲過程與函式很相似,它們存儲查詢陳述式,並在調用時接受相應的參數,但MySQL在5.1版本之前並沒有提供類似功能,某些其他類型的資料庫管理係統也沒有。

  在本文中,將把上述兩個特性結合進範例的query物件中,範例將模擬一個基本的存儲過程,並在內部儲存結果指針。目前,重點是從物件中執行query,在此可以調用MySqlDB物件的query()函式。

  可在query物件中定義如下的public函式:

  __construct()--構造函式接受一個包含了實現DB介麵物件實例引用的參數。

  prepare()--函式prepare()初始化query的存儲過程。它可能包含一個或多個有限的占位符,而其將會作為參數傳遞給execute()函式。占位符定義為與參數個數有關的一個冒號緊跟一個整數及與參數類型有關的一個字母。

  包含占位符的一個簡單的query看起來像以下這樣:

SELECT col1,col2 FROM table_name WHERE
col1=:1I

  execute()--函式execute()將執行query。如果它被prepare()函式過早地初始化為一個存儲過程,任何傳遞進來的參數都會被作為存儲過程的執行參數,否則,第一個參數隻會被作為查詢文字。函式execute()將返回執行查詢後的結果。

  compile()--函式compile()與函式execute()類似,實際上,query並沒有執行,而是取代查詢字串中所有占位符,接受存儲過程的參數,並返回query的編譯版本。

  受保護的成員

  正如上麵所提到的,可見性的概念可用於隱藏物件的內部工作,保護內部工作所需的資料完整性。前麵已經解釋,query返回的結果指針將會儲存為protected內容,在此使用保護成員是因為從query物件派生出來的特定資料庫query物件可能會多載某些核心功能。

  深掘程式碼

  理論說夠了,現在開始編寫程式碼,首先,建立一個例1所示的範本:

  例1:資料庫query類的一個範本

class DBQuery
{
 /**
 *儲存一個實現了DB介麵物件的引用。
 */
 protected
$db;

 /**
 *如果是一個存儲過程,設為true。
 */
 protected $stored_procedure =
false;

 /**
 *儲存一個移除了所有字串的query。
 */
 private
$query;

 /**
 *用於在SQL中比對引號。
 */
 private static $QUOTE_MATCH =
"/(".*(?db = $db;
}

public function
prepare($query)
{
 $this->stored_procedure = true;
}

public
function compile($args)
{}

public function
execute($query)
{}
}

<<<返回技術中心

技術文章

站內新聞

我要啦免费统计