首頁 > php教程 > PHP开发 > 利用PHP的OOP特性實現資料保護(1 )

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

黄舟
發布: 2016-12-21 10:58:24
原創
1290 人瀏覽過

在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:Oquery類別的一個範本

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)
{}
}
登入後複製

  例1:Oquery類別的一個範本

rrreee

  例1:Oquery類別的一個範本
rrreee

〠以上資料保護(1 )的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)! 🎜🎜🎜🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板