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

來源:互聯網
上載者:User

在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對象可能會重載某些核心功能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.