连接循环的最佳方式

时间:2013-05-30 22:25:56

标签: php oop loops connection

我对OOP比较陌生,现在我正在尝试将我的网站改编为githibs的Safemysql https://github.com/colshrapnel/safemysql

在进行基于OOP的更多代码编写之前,我只是碰到了一个我必须解决的谜语。

在我的网站上,我有一个管理部分,我查询数据库用户的不同列表。 我对User类的第一次尝试是

class User {
    function __construct($user_id) {
        $this->dbs  = new SafeMySQL(); 
        $this->user = $this->dbs->getRow('SELECT * FROM users WHERE id = ?i', $user_id);
    }
    function get_something_else() { }
    function calculate_this() { }
}

foreach (array as $user_id) {
    $user = new User($user_id);
}    

使用第一种方法告诉我,如果我有一个结果页面,我将创建尽可能多的连接,所以我想到了另外两种方法来使用我的用户类:

class User {
    function __construct() {
        $this->dbs = new SafeMySQL(); 
    }
    function load_user($user_id) {
        $this->user = $this->dbs->getRow('SELECT * FROM users WHERE id = ?i',$user_id);
        $return $this->user
    }
    function get_something_else() { }
    function calculate_this() { }
}

$data = new User();

foreach (array as $user_id) {
    $user = data->load_user($user_id);
}

我使用这个类没有问题,但我一直认为我会错误地定义一个可以为另一个用户持久的变量。

我想到的另一个选择是定义我的连接,然后将它用于像$user = new User($user_id, $connection)这样的类中,但现在它看起来并不整洁。

现在我发现全局连接和持久连接,但有些人不推荐它们。

编写用户类的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是在需要它的页面中创建数据库连接,然后将其作为变量传递给用户类的构造函数以供其使用。我知道你已经尝试过了,但这是最好的方法。

示例:

的index.php

$dbs = new SafeMySQL();
$user = new User($dbs, 1);

user.php的

class User {
      function __construct($dbs, $user_id){
          $this->dbs = $dbs;
          $this->user = $this->dbs->getRow('SELECT * FROM users WHERE id = ?i',$user_id);
       }
}

答案 1 :(得分:0)

你在构造函数参数中包含连接的想法是我认为很好的。这个概念被称为“依赖注入”。依赖注入的目的是将您的DBMS与应用程序逻辑分离,这样如果有一天您决定不使用SafeMySQL,您可以在不更改User类的情况下传入不同的连接(您需要在SafeMySQL周围编写一个接口)要完成那个的课程)。在这种情况下,它具有额外的好处,可以让您管理与独立于应用程序逻辑的DBMS的连接。