Php 为循环连接的最佳方式

Php 为循环连接的最佳方式,php,oop,loops,connection,Php,Oop,Loops,Connection,我对OOP比较陌生,现在正尝试将我的网站调整为githibs的Safemysql 我刚刚遇到了一个谜题,在继续编写更多基于OOP的代码之前,我必须解决这个谜题 在我的网站上,我有一个管理部分,在那里我可以为我的数据库用户查询不同的列表。 我对User类的第一次尝试是 class User { function __construct($user_id) { $this->dbs = new SafeMySQL(); $this->user

我对OOP比较陌生,现在正尝试将我的网站调整为githibs的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=newuser($user\u id,$connection)
,但现在它看起来并不整洁

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


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

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

例如:

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);
       }
}

关于在构造函数参数中包含连接,我认为这是一个好主意。这个概念被称为“依赖注入”。依赖项注入的目的是将DBMS与应用程序逻辑分离,这样,如果有一天您决定不使用SafeMySQL,您可以在不更改用户类的情况下传递不同的连接(您需要围绕SafeMySQL类编写一个接口来完成这一点)。在这种情况下,它还有一个额外的好处,即允许您独立于应用程序逻辑管理与DBMS的连接

谢谢你的建议。事实上,我使用了这个方法最糟糕的论点“它看起来不整洁。我会继续这样使用它。:)实际上,我在PHP上讨论过这个问题。他们建议低端项目使用它,高端项目使用MVC。