2012-06-14 30 views
1

我目前正試圖建立自己的一個很好的幾個類來建立我的網頁更快一點。爲我的整個網站創建一個數據庫圖層類,需要一些PHP建議嗎?

我現在有這個設置,

// page class 
class Page extends DBC { 
    // creates a page 
    public function create($data = false) { 
     echo 'SOME BASIC HTML TO SETUP PAGE'; 
     // pass the database connection var to content function 
     content($this -> $dbc, $data); 
     echo 'SOME BASIC HTML TO SETUP PAGE'; 
    } 
} 
// dbc class 
class DBC { 
    public $dbc; 
    public function __construct() { 
     // sets the database connection 
    } 
} 

併爲每個新頁面創建我只是這樣做需要我的課到腳本之後。

// content function 
function content($dbc) { 
    // some content 
    // am able to use dbc 
} 
// new page object 
$page = new Page(); 
// am able to use dbc var fine here too 
$page -> dbc -> // execute a query 
// create page 
$page -> create(); 

但我現在面臨的問題是如何最好地創建我DBC類的內部功能,使我的查詢建築更快。我嘗試添加下面的函數到類DBC

public static function query($q, $data, $options = array()) { 
    // execute prepared query 
    $q = $this -> dbc -> prepare($q); 
    return $q -> execute($data); 
} 

但作爲唯一的數據庫連接被傳遞到它,我不能用我這content函數內部和DBC類內部的query函數使用對象上下文的連接。

我解釋我的問題後的問題如下;

是否最好在我的DBCstatic中爲我執行查詢的功能,並只傳入現有連接?

OR

它會更好整個DBC對象傳遞給我的content功能Page類中像下面,

content(new DBC(), $data); 

這樣讓我用函數對象上下文。 Page類仍然需要擴展DBC類,因爲我需要使用content函數以外的dbc變量。但是,如果DBC類擴展Page,那麼會不會產生DBC類的兩個實例,而當傳入content函數時,會有一個實例被擴展?

感謝您花時間閱讀此問題並提供任何答案!

+0

「之後要求我的課程進入腳本。」 - > [自動加載??](http://php.net/manual/en/function.spl-autoload.php) – PeeHaa

+0

不,我只是做'require('classes.php');'因爲它們被保存在一個不同的文件。 – Griff

+0

設置一個自動加載器功能有效地需要這些文件,當你需要他們 - 或者試圖,至少。這樣,你不需要你不需要的文件。當你嘗試實例化一個未定義的類時,自動加載器將查找它需要加載的文件,如果魔術功能正常工作,那就是:)另外:'require_once('classes.php');'是你想要:如果班級被定義,不需要第二次需要該文件 –

回答

1

去通過什麼我明白了,我想到一個例子是最好的,所以你可以看看,並加以改進按您的要求。
檢查該類我寫了github
和使用情況
看看這個gist因此,所有我要說的是,看它並拿出適合您需求的解決方案,或者你可以只使用它...它當然是免費的

+0

謝謝你會看看這個,並告訴你我如何得到:) – Griff

+0

好的...祝你好運! –

1

您應該查看MVC(模型 - 視圖 - 控制器)模式。你不希望你的html/Page代碼和你的數據庫代碼混合在一起。如果您要花時間創建數據庫訪問層,則應該繼續並分離顯示和數據代碼。

如果現在完整的MVC分離工作太多了,我建議您使用Repository Pattern進行數據庫訪問。它將爲您提供所需的數據庫方法,您將可以通過一個精簡的系統訪問您的Page類。

接受的這個問題的答案對你有良好的信息: Setting up a repository pattern in MVC