日期: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 |
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) {} } |