PHP 使用多个 MySQL 数据库连接
PHP using multiple MySQL database connections
我正在创建一个在不同服务器上使用 3 个不同数据库的应用程序。获取数据发生在我的数据映射器中,每个映射器都扩展了一个抽象的 DataMapper 父级 class:
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 个连接之一的页面来说有点矫枉过正。 return 为应用程序的每个部分建立正确的数据库连接的最佳方法是什么?我听说过应用程序注册表,但我不知道如何设置类似的东西。
我不喜欢您设置数据映射器的方式。您正在为每个映射器创建一个新连接,即使它使用已经建立连接的提供者。换句话说,每个数据映射器都会创建一个新的数据库对象。
理想情况下,应保存这些数据库对象并将其传递给需要它们的数据映射器。自动注入通常效果很好。这意味着您不必使用 new
关键字实例化对象,而是通过对象的构造参数来请求它们。
例如:
class Example1Mapper extends DataMapper {
function __construct( Provider1 $provider1 ) { ... }
}
class Example2Mapper extends DataMapper {
function __construct( Provider1 $provider1, Provider2 $provider2 ) { ... }
}
以上,两个映射器 类 需要不同的提供程序。您唯一需要做的就是通过对象的构造函数指定它。自动依赖 injecting/autowiring 完成剩下的工作。
我不知道你的架构是如何建立的,但这就是我所做的:路由器和注入器一起工作。路由器决定应该调用什么控制器以及应该调用什么动作(方法)。喷射器获取此信息并反映控制器的参数。它还反映了参数的参数,等等……注入器创建所有对象并决定要传递的数据库提供者、域对象等。 and 将是开始学习注入器的好地方,但您可能想四处阅读。还有一些不错的轻量级DIC。
我正在创建一个在不同服务器上使用 3 个不同数据库的应用程序。获取数据发生在我的数据映射器中,每个映射器都扩展了一个抽象的 DataMapper 父级 class:
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 个连接之一的页面来说有点矫枉过正。 return 为应用程序的每个部分建立正确的数据库连接的最佳方法是什么?我听说过应用程序注册表,但我不知道如何设置类似的东西。
我不喜欢您设置数据映射器的方式。您正在为每个映射器创建一个新连接,即使它使用已经建立连接的提供者。换句话说,每个数据映射器都会创建一个新的数据库对象。
理想情况下,应保存这些数据库对象并将其传递给需要它们的数据映射器。自动注入通常效果很好。这意味着您不必使用 new
关键字实例化对象,而是通过对象的构造参数来请求它们。
例如:
class Example1Mapper extends DataMapper {
function __construct( Provider1 $provider1 ) { ... }
}
class Example2Mapper extends DataMapper {
function __construct( Provider1 $provider1, Provider2 $provider2 ) { ... }
}
以上,两个映射器 类 需要不同的提供程序。您唯一需要做的就是通过对象的构造函数指定它。自动依赖 injecting/autowiring 完成剩下的工作。
我不知道你的架构是如何建立的,但这就是我所做的:路由器和注入器一起工作。路由器决定应该调用什么控制器以及应该调用什么动作(方法)。喷射器获取此信息并反映控制器的参数。它还反映了参数的参数,等等……注入器创建所有对象并决定要传递的数据库提供者、域对象等。