gpt4 book ai didi

php - 如何避免使用 OOP PHP 打开多个数据库连接

转载 作者:可可西里 更新时间:2023-11-01 12:48:46 27 4
gpt4 key购买 nike

我担任过程式程序员已有 4 年多了,是时候开始研究 OOP 了。话虽如此,假设我需要在我的类(class)中调用两个方法。每种方法都需要连接到数据库,因此这是到数据库的两次旅行,这也会打开多个连接。可以通过在应用程序层(构造函数?)中使用某种代码来避免这种情况,还是必须在数据库端设置连接池?只是为了好玩,我没有使用 mysql;我将 mongodb 与 codeigniter 一起使用。

这是我目前拥有的,不确定它是否适合使用?

这是我设置数据库信息的地方:

database_conn.php

class Database_Conn extends Model {

function _connect() {
$m = new Mongo("localhost:27017", array("persist"=>"x"));
$db = $m->selectDB( "foo" );
return $db;
}
}

示例模型文件

class Home_model extends Model {

public function __construct() {
// Establish connection to "profiles" table
$this->db_conn = Database_Conn::_connect()->selectCollection( "profiles" );
}

function getMyProfile($username) {
$data = $this->db_conn->findOne(array("username" => $username) );
return $data;
}

function getAll() {
$data = $this->db_conn->find();
return $data;
}
}

最佳答案

你应该使用singleton pattern

编辑:按照您的方式,可以多次调用 _connect,这意味着重新连接。

单例实现通常意味着您必须将构造函数设为私有(private)/ protected ,并定义一个 getInstance 方法,该方法在第一次调用时创建连接并在以后的调用中返回创建的连接。

这是我会做的:

class Database_Conn extends Model {

static protected $_instance;

protected $db = null;

final protected function __construct() {
$m = new Mongo("localhost:27017", array("persist"=>"x"));
$this->db = $m->selectDB( "foo" );
}

static public function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}

public function getConnection() {
return $this->db;
}

final protected function __clone() { }
}

然后使用Database_Conn::getInstance()->getConnection() 获取连接对象。

关于php - 如何避免使用 OOP PHP 打开多个数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com