как ни банально, класс для работы с БД

Novice

Новичок
как ни банально, класс для работы с БД

При написании класса для работы с БД хотелось следующего:
вызов статического метода класса должен возвращать его
новый экземпляр и устанавливать новое соединение с БД если таков отсутствует или указан другой DSN, в противном случае просто возвращать существующий, синглон что-ли...

Вот как это выглядит:
<?php
class Db
{
// что-то типа user:password@hostname:port/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:password@localhost/base_1");
$obj_2 = Db::get_instance("root:password@localhost/base_1");

[obj_1] => Db Object
(
[link:protected] => Resource id #6
)

[obj_2] => Db Object
(
[link:protected] => Resource id #6
)

ИЛИ

$obj_1 = Db::get_instance("root:password@localhost/base_1");
$obj_2 = Db::get_instance("root:password@localhost/base_2");

[obj_1] => Db Object
(
[link:protected] => Resource id #6
)

[obj_2] => Db Object
(
[link:protected] => Resource id #7
)

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

Спасибо.
 

Nimous

Guest
class DB{

function &init(){
static $init;
if (!is_object($init)){
$init = new DB;
}
return $init;
}

........
}

и слюбого места $db=DB::init();

(php 4);

Извини. Целиком класс писать не буду.

В общем мыслишь правильно :)
 
Сверху