Объект-ссылка

Объект-ссылка позволяет создать объект, разделяющий одно подключение с основным объектом, но имеющий свои настройки.

Например, какая-то система использует одно подключение к базе данных, но для какого-то модуля требуются определённые префиксы таблиц или только для него следует включить отладку.

goDBLink

Создать объект-ссылку можно двумя способами:


$db = new goDB(...);
$link = new goDBLink($db);
$link = $db->getLinkObject();			
			

При создании link нового подключения не создаётся, а все вызовы методов link переадресуются к db.

goDBLink имеет такой же интерфейс, как и goDB за исключением одного нового метода: godbObject() (получить исходный объект).

Ссылка позволяет переопрелить следующие настройки:

  1. Префикс таблиц (setPrefix(), getPrefix())
  2. Настройки отладки (setDebug(), getDebug())
  3. Декорирование запроса (queryDecorated(), getQueryDecorator())

$link = $db->getLinkObject();
$link->setDebug(true);     // включение отладки только для $link
$link->setPrefix('link_'); // префиксы таблиц только для $link
			

При создании ссылки, эти настройки копируются из исходного объекта. В дальнейшем, ни замена их в ссылке не затронет исходный объект, ни замена в исходном объекте, не затронет ссылку.

Интерфейс goDBI

Объект-ссылку можно применять везде где угодно вместо объекта goDB. Единственно, этому может помешать type-hinting:


public function setDatabase(goDB $db) {
	$this->db = $db;
}
			

Сюда нельзя передать объект goDBLink, так как он не наследуется от goDB.

В этом случае можно использовать формальный интерфейс goDBI, от которого наследуются оба класса.

© Григорьев Олег aka vasa_c, 2006—2010