Объект-ссылка
Объект-ссылка позволяет создать объект, разделяющий одно подключение с основным объектом, но имеющий свои настройки.
Например, какая-то система использует одно подключение к базе данных, но для какого-то модуля требуются определённые префиксы таблиц или только для него следует включить отладку.
goDBLink
Создать объект-ссылку можно двумя способами:
$db = new goDB(...);
$link = new goDBLink($db);
$link = $db->getLinkObject();
При создании link нового подключения не создаётся, а все вызовы методов link переадресуются к
db.
goDBLink имеет такой же интерфейс, как и goDB за исключением одного нового метода:
godbObject() (получить исходный объект).
Ссылка позволяет переопрелить следующие настройки:
- Префикс таблиц (
setPrefix(), getPrefix()) - Настройки отладки (
setDebug(), getDebug()) - Декорирование запроса (
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, от которого наследуются оба класса.