slego
Новичок
И снова здравствуйте
: правильное использование Singleton
Подскажите, пожалуйста. Я что-то делаю неправильно. Хочу изобразить следующее:
есть класс базы данных DB который использует клас подключения DBConnection.
Класс DBConnection хотелось бы сделать в виде Singleton'а, т.е.
в приложении может быть множество классов DB, которые будут дружно использовать глобальный
класс DBConnection.
Насколько я понял про singleton, пытаюсь сделать следующее
index.php
db.class.php
Если код не очень ясен, то попытаюсь объяснить словами.
В самом начале скрипта инициализирую экземпляр класса DBConnection
(глобального, единственного на все приложение). Дальше, по мере надобности создаются
экземпляры класса DB. Внутри конструктора происходит
попытка подключения к бд, используя свойство глобального класса DBConnection.
Так вообще можно делать???
Большое спасибо.

Подскажите, пожалуйста. Я что-то делаю неправильно. Хочу изобразить следующее:
есть класс базы данных DB который использует клас подключения DBConnection.
Класс DBConnection хотелось бы сделать в виде Singleton'а, т.е.
в приложении может быть множество классов DB, которые будут дружно использовать глобальный
класс DBConnection.
Насколько я понял про singleton, пытаюсь сделать следующее
index.php
PHP:
include_once("db.class.php");
DBConnection::instance("localhost;root;pass;db");
$db = &new DB();
$db->execQuery("SELECT * FROM messages");
while(!$db->eof())
{
echo $db->fieldByName("message");
$db->next();
}
PHP:
class DBConnection
{
var $_connection;
function DBConnection($connection)
{
list($db_host, $db_user, $db_pass, $db_name) = explode(";", $connection);
$this->_connection = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name, $this->_connection)
}
function getConnection()
{
return $this->_connection;
}
function &instance($connection)
{
static $db_connection;
if(!$db_connection)
{
$db_connection = new DBConnection($connection);
}
return $db_connection;
}
};
class DB
{
var $_connection;
function DB()
{
// ПРОБЛЕМА, СОБСТВЕННО ГДЕ-ТО ЗДЕСЬ
$this->_connection = &DBConnection::getConnection();
}
function execQuery($sql)
{
$res = mysql_query($sql, $this->_connection);
...
}
...
};
Если код не очень ясен, то попытаюсь объяснить словами.
В самом начале скрипта инициализирую экземпляр класса DBConnection
(глобального, единственного на все приложение). Дальше, по мере надобности создаются
экземпляры класса DB. Внутри конструктора происходит
попытка подключения к бд, используя свойство глобального класса DBConnection.
Так вообще можно делать???
Большое спасибо.