Novice
Новичок
как ни банально, класс для работы с БД
При написании класса для работы с БД хотелось следующего:
вызов статического метода класса должен возвращать его
новый экземпляр и устанавливать новое соединение с БД если таков отсутствует или указан другой DSN, в противном случае просто возвращать существующий, синглон что-ли...
Вот как это выглядит:
<?php
class Db
{
// что-то типа user
assword@hostname
ort/db_name
public static $dsn;
// как в синглтоне
private static $instance = null;
// идентификатор ссылки соединения
protected $link;
protected function __construct ($dsn)
{
$this->connect($dsn);
}
public function connect ($dsn)
{
// тут разбор DSN, возвр. массив типа
// [user] => root, [pass] => pass, ...
$opt = $this->parse_dsn($dsn);
if (self::$dsn == $dsn) {
$this->link = @mysql_connect($opt['server'], $opt['user'], $opt['pass'], FALSE);
} else {
self::$dsn = $dsn;
$this->link = @mysql_connect($opt['server'], $opt['user'], $opt['pass'], TRUE);
}
if (!is_resource($this->link) || !@mysql_select_db($opt['db'], $this->link)) {
return Error::set_error("Cannot connect to database: ".$opt['db']);
}
}
// собственно этот статический метод
public function get_instance ($dsn)
{
if (self::$instance == null || self::$dsn != $dsn) {
self::$instance = new self($dsn);
}
return self::$instance;
}
// тут все нужные методы.......
}
?>
Ну и с любого места использую так
$obj_1 = Db::get_instance("root
assword@localhost/base_1");
$obj_2 = Db::get_instance("root
assword@localhost/base_1");
[obj_1] => Db Object
(
[link
rotected] => Resource id #6
)
[obj_2] => Db Object
(
[link
rotected] => Resource id #6
)
ИЛИ
$obj_1 = Db::get_instance("root
assword@localhost/base_1");
$obj_2 = Db::get_instance("root
assword@localhost/base_2");
[obj_1] => Db Object
(
[link
rotected] => Resource id #6
)
[obj_2] => Db Object
(
[link
rotected] => Resource id #7
)
Хотелось бы услышать ваши комментарии, так как возникает сомнение, что либо я огород горожу либо переписал что-то существующее...
Спасибо.
При написании класса для работы с БД хотелось следующего:
вызов статического метода класса должен возвращать его
новый экземпляр и устанавливать новое соединение с БД если таков отсутствует или указан другой DSN, в противном случае просто возвращать существующий, синглон что-ли...
Вот как это выглядит:
<?php
class Db
{
// что-то типа user


public static $dsn;
// как в синглтоне
private static $instance = null;
// идентификатор ссылки соединения
protected $link;
protected function __construct ($dsn)
{
$this->connect($dsn);
}
public function connect ($dsn)
{
// тут разбор DSN, возвр. массив типа
// [user] => root, [pass] => pass, ...
$opt = $this->parse_dsn($dsn);
if (self::$dsn == $dsn) {
$this->link = @mysql_connect($opt['server'], $opt['user'], $opt['pass'], FALSE);
} else {
self::$dsn = $dsn;
$this->link = @mysql_connect($opt['server'], $opt['user'], $opt['pass'], TRUE);
}
if (!is_resource($this->link) || !@mysql_select_db($opt['db'], $this->link)) {
return Error::set_error("Cannot connect to database: ".$opt['db']);
}
}
// собственно этот статический метод
public function get_instance ($dsn)
{
if (self::$instance == null || self::$dsn != $dsn) {
self::$instance = new self($dsn);
}
return self::$instance;
}
// тут все нужные методы.......
}
?>
Ну и с любого места использую так
$obj_1 = Db::get_instance("root

$obj_2 = Db::get_instance("root

[obj_1] => Db Object
(
[link

)
[obj_2] => Db Object
(
[link

)
ИЛИ
$obj_1 = Db::get_instance("root

$obj_2 = Db::get_instance("root

[obj_1] => Db Object
(
[link

)
[obj_2] => Db Object
(
[link

)
Хотелось бы услышать ваши комментарии, так как возникает сомнение, что либо я огород горожу либо переписал что-то существующее...
Спасибо.