簡體   English   中英

PHP使用多個MySQL數據庫連接

[英]PHP using multiple MySQL database connections

我正在創建一個在不同服務器上使用3個不同數據庫的應用程序。 獲取數據發生在我的Data mappers中,每個都擴展了一個抽象的DataMapper父類:

abstract class DataMapper {

    protected $db;
    protected $db2;
    protected $db3;

    function __construct() {
        $this->db = new Database('db1');
        $this->db2 = new Database('db2');
        $this->db3 = new Database('db3');
    }

}

但是,對於只需要這3個連接中的一個的頁面來說,這會有點過分。 為應用程序的每個部分返回正確的數據庫連接的最佳方法是什么? 我聽說過應用程序注冊表,但我不知道如何設置這樣的東西。

我不喜歡你如何設置你的數據映射器。 您正在為每個映射器創建新連接,即使它使用已建立連接的提供程序也是如此。 換句話說,每個數據映射器都會創建一個新的數據庫對象。

理想情況下,應保存這些數據庫對象並將其傳遞給需要它們的數據映射器。 自動注射通常效果很好。 這意味着您不必使用new關鍵字實例化對象,而是通過對象的構造參數請求它們。

例如:

class Example1Mapper extends DataMapper {
    function __construct( Provider1 $provider1 ) { ... }
}

class Example2Mapper extends DataMapper {
    function __construct( Provider1 $provider1, Provider2 $provider2 ) { ... }
}

上面,兩個映射器類需要不同的提供者。 您需要做的唯一事情是通過對象的構造函數指定它。 其余的是自動依賴注入/自動裝配。

我不知道你的架構是如何建立的,但這就是我所做的:路由器和注入器協同工作。 路由器確定應該調用哪個控制器以及應該調用什么操作(方法)。 進樣器獲取此信息並反映控制器的參數。 它還反映了參數的參數,等等......注入器創建所有對象並決定要傳遞的數據庫提供程序,域對象等。 這里這里將是開始學習注射器的好地方,但你可能想要做一些閱讀。 還有一些很好的輕量級DIC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM