Я был процедурным программистом больше 4 лет, и пора начать изучать ООП. После этих слов скажем, я должен был назвать два метода в своем классе. Каждый метод требует соединения с DB, таким образом, это - два прохождения в DB, который также открывает многочисленные связи. Этого можно избежать при наличии своего рода кода на прикладном уровне (конструктор?) или пул соединения должен быть установкой на стороне DB? И только для ударов, я не использую mysql; я использую mongodb с codeigniter.
Вот то, что я имею до сих пор, не уверенный, если это идеально для использования?
Вот то, где я устанавливаю свою информацию о DB:
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;
}
}
вы должны использовать одноэлементный шаблон
РЕДАКТИРОВАТЬ: как вы это сделали, _connect можно вызывать несколько раз, что означает повторное подключение.
Одноэлементная реализация обычно означает, что вам нужно сделать конструктор закрытым / защищенным и определить метод 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 ()
, чтобы получить объект подключения.
Вам следует изучить класс менеджера для ваших соединений с базой данных. Тогда у вас может быть одно центральное место, откуда вы запрашиваете соединения. Если уже существует открытое соединение, менеджер может вернуть его вместо возврата нового соединения.
Это был бы один из подходов. Существует масса примеров того, как реализовать что-то подобное. Уже есть некоторые для mysql и mssql. Но вы наверняка могли бы продлить свой db.
Используйте слой базы данных. Dibi - отличная библиотека в этом случае. http://dibiphp.com