2010-06-21 81 views
2

我正在嘗試製作一個小型CMS以獲得樂趣,但是我正在使用面向對象的一些語義。我有一個基本的數據庫類,然後我有一個管理員類。 admin類必須進行數據庫查詢,所以我一直在做的是讓admin類擴展db類,然後通過構造將鏈接傳遞給db資源。我的代碼看起來是這樣的:我應該如何將MySQL數據庫鏈接傳遞給PHP中的類?

class admin extends mysql { 
    function __construct($link) { 
     $this->link = $link; //$this->link is in the mysql class 
    } 
} 
$db = new mysql($host,$user,$pass,$name); 
$admin = new admin($db->link); 

我知道應該有一個更簡單的方法來此不延長DB類(我假設調用它的一個全新的實例)。一個朋友告訴我,只是傳遞$ db對象的管理類,它有儲存像這樣:

class admin { 
    var $db; 
    function __construct($db) { 
     $this->db = $db; 
    } 
} 

$db = new mysql($host,$user,$pass,$name); 
$admin = new admin($db); 

這是做事的正確方法是什麼?如果數據庫鏈接已經建立,是否有更簡單的方法來引用它?

回答

2

是的,你的朋友是絕對正確的。那麼,他比你原來的方法更正確。

你應該做的是更進一步,並創建一個類,其只有工作是查詢或更新到數據庫並返回結果。該班負責組織查詢(全部爲preparedstatements);你的「管理員」類不知道如何連接或查詢數據庫,只知道如何使用這個類,我們稱之爲「data_layer」。

data_layer類的一個實例傳遞給構造函數中的admin類,etvoilà!你已經做了一個分層程序。恭喜!你正朝着一個更大的世界邁出第一步。

0

我傾向於在admin類中聲明並創建數據庫類的實例。原因是你的管理類在數據庫上執行的操作可能與其他數據庫訪問不太匹配;例如,管理類可能會在不方便其他應用程序的情況下啓動或提交事務。如果管理類具有自己的連接,則不會發生這種情況。

相關問題