Php 类循环创建了太多的连接

Php 类循环创建了太多的连接,php,mysql,oop,class,mysqli,Php,Mysql,Oop,Class,Mysqli,所以我和很多班级一起工作。。。在我将会话类(验证和创建/销毁会话)包含到用户类(执行用户操作、登录、注册等)中之前,一切都很正常 基本上,我得到了一个“mysqli连接太多!”错误。。。我认为这是因为我的sessions类包含在users类中,反之亦然: __类用户的构造: $this->db = new DB($db); $this->password = new Password(); $this->session = new Session($db); $this-&

所以我和很多班级一起工作。。。在我将会话类(验证和创建/销毁会话)包含到用户类(执行用户操作、登录、注册等)中之前,一切都很正常

基本上,我得到了一个“mysqli连接太多!”错误。。。我认为这是因为我的sessions类包含在users类中,反之亦然:

__类用户的构造:

$this->db = new DB($db);
$this->password = new Password();
$this->session = new Session($db);
 $this->password = new Password();
$db只是一个数据库信息数组

__课堂会话的构建:

 $this->error = new Error();
 $this->users = new User($db);
 $this->db = new DB($db);
$this->error = new Error();
因此,您可以看到它们是如何相互包含的,我认为这就是导致我的连接错误的原因。

在会话类中

在您的用户类中

$this->session = new Session($this->db);

您必须首先创建一个,然后将其传递给另一个的构造函数

比如:

会议:

__construct($db){
  $this->db = $db; //Don't reconstruct
  $this->users = new User($db,$this);
  ...
}
用户:


创建数据库连接不是用户的工作。(当你想到它的时候,它没有多大意义,是吗?)

相反,在构造函数中询问数据库连接

class User {
    public function __construct(DB $db) {

通过这种方式,您可以在整个应用程序中重用连接对象。

如果创建一个第三个类,用这两个类构造,并在第三个类上运行循环,您会这样做吗?然后在UserSession上运行所有DB实例?我不知道

__类用户的构造:

$this->db = new DB($db);
$this->password = new Password();
$this->session = new Session($db);
 $this->password = new Password();
__课堂会话的构建:

 $this->error = new Error();
 $this->users = new User($db);
 $this->db = new DB($db);
$this->error = new Error();
__类UserSession的构造:

$this->db = new DB($db);
$this->users = new User($db);
$this->users = new Session($db);

你必须消除这个循环。如果用户创建了一个会话,该会话创建了一个用户,该用户创建了一个会话,等等。。。你将基本上杀死你的系统。谢天谢地,在内存耗尽之前,您已经用完了mysql连接插槽,但无论如何,您都必须打破一个无限循环。为每个用户创建一个新的数据库句柄不是一个好主意。不要这样做。相反,请使用公共连接池。