2014-09-28 49 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你可以做的另一件事是创建一个函数,当它被调用时将连接到数据库。这样,即使不使用数据库连接,也不会激活数据库连接。它可以让你的脚本运行得更快一点,因为只有在你需要时才会调用资源。

您还可以拥有一个紧密连接功能,您可以在完成执行查询并不再需要数据库连接时调用该功能。