Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP单例数据库限制_Php_Singleton - Fatal编程技术网

PHP单例数据库限制

PHP单例数据库限制,php,singleton,Php,Singleton,好吧,这是突然发生的,我想我应该请Stack Overflow的一些智者来帮助我 我已经了解到,当您想要创建数据库连接以返回一个实例时,应该使用Singleton模式。这一切都很好,但这不限制您只使用一个连接吗?因为singlton只返回对象的单个实例 假设我有一个方法,返回一个类构造函数的单个实例,构造函数根据用户指定的参数创建了一个连接,或者说在一个配置文件中,然后用户想要创建到另一个数据库的第二个连接,那么单例不就是返回原始连接吗,因此,它限制用户创建多个数据库连接?我可以通过多种方式看到

好吧,这是突然发生的,我想我应该请Stack Overflow的一些智者来帮助我

我已经了解到,当您想要创建数据库连接以返回一个实例时,应该使用Singleton模式。这一切都很好,但这不限制您只使用一个连接吗?因为singlton只返回对象的单个实例


假设我有一个方法,返回一个类构造函数的单个实例,构造函数根据用户指定的参数创建了一个连接,或者说在一个配置文件中,然后用户想要创建到另一个数据库的第二个连接,那么单例不就是返回原始连接吗,因此,它限制用户创建多个数据库连接?

我可以通过多种方式看到实现,包括:

1) singleton保存成员数据,包括到数据库a的连接和包含到数据库B的连接的另一个成员变量


2) 与#1相同,但假设您希望每个数据库都有一个连接池,这样您就可以保留包含连接的两个数组。当然,这些都可以一次连接,但更好的是,您可以延迟连接它们,但要维护此数组(达到最大连接数)。

您可以使用
单例模式创建
连接
类。这个类管理多少个连接取决于您。例如,您可以保留一个连接,或者您可以使用对象池类型模式来管理一个连接池。

您在哪里读到这个sage建议的?嗯,我明白了,所以对于#1,您将有两个成员,并且getInstance方法通常会返回两个实例?实际上,它只返回一个单例实例,而该单例将包含类似getConnectionA()和getConnectionB()的内容。如果您有多个正在进行的事情,那么您需要确保只有一个进程/线程/用户正在使用ConnectionA…因此您可以让它们阻塞(等待),或者更可能的是您有一个连接池。因此,从单例调用getConnectionA()将从池中返回有效连接。您将确保连接在使用后返回到池中,并且永远不会达到最大值。我明白了,所以本质上您有两种方法,用于连接不同的数据库?还是我完全误解了你的想法啊,太棒了。谢谢你的帮助,亚瑟