2014-09-28 47 views
0

我正在努力與OOP握手一點。多個數據庫連接(不受歡迎的)

我用這__construct方法wthin我所有的類文件 這是運作正常,並如預期

private $conn; // database connection 

// make database connection if not exist! 
function __construct() { 
    // autoload class files 
    require_once('class/autoloader.php'); 
    spl_autoload_register('myAutoloader'); 

    // open db connection so it is available to all files 
    $db = new dbconn(); 
    $this->conn = $db->get_connection();   
} 

但是,我有所有的參考海誓山盟多個類文件,這樣數據庫連接被加載到所有類文件這是否意味着我打開了太多的連接。 並且我是否需要關閉連接的每個實例? (如果是這樣,這很棘手,因爲我不知道可能已經啓動了哪些類文件)。

我將不勝感激任何意見!

+0

將數據庫連接置於配置文件中。將所有腳本中必需的*任何*放在配置文件中。你這樣做的方式意味着如果密碼更改,你必須更新這些文件中的所有*。呸! – timgavin 2014-09-28 03:19:52

+0

可能的解決方案是使用依賴注入:創建一個全局數據庫連接並將其作爲參數傳遞給構造函數。 – jeroen 2014-09-28 03:45:35

+0

謝謝蒂姆。密碼在一個配置文件中。如果我將數據庫連接添加到配置文件中,除非我將它注入到所有需要它的函數中,否則它將不可用於我的類。 – Ford 2014-09-28 03:48:38

回答

1

上面的代碼沒有給出足夠的上下文來回答是否有任何錯誤。

有些事情要記住。

只要您創建此類的新實例,__construct函數就會被調用。如果您只創建這個類的一個實例並與您正在使用的任何其他類共享實例,那麼您將會很好。

// Use DI to pass in the database connection. 
function __construct($dbConn) { 
    $this->conn = $dbConn;   
} 
+0

謝謝Jmaloney。謝謝。上面的代碼工作,並在上下文中它並沒有技術上的錯誤,但正如你所說我加載多個實例,並在所有類文件中也有相同的__construct,所以我會打開多個連接。我想知道這是否是錯誤的。然而,正如Jeroen上面所說,我想我應該也許只是將連接傳遞給__construct,這樣我只有1個連接在整個應用程序 – Ford 2014-09-28 03:55:22

+0

@Ford依賴注入將是一個偉大的路要走。 – jmaloney 2014-09-28 03:58:51

+0

謝謝,我已經做了這個(不知道爲什麼我沒有想到這個.... dohhh) – Ford 2014-09-28 04:14:36

0

@Ford你可以做的另一件事是創建一個函數,當它被調用時將連接到數據庫。這樣,即使不使用數據庫連接,也不會激活數據庫連接。它可以讓你的腳本運行得更快一點,因爲只有在你需要時纔會調用資源。

您還可以擁有一個緊密連接功能,您可以在完成執行查詢並不再需要數據庫連接時調用該功能。