Этот реестр может сохранять и возвращать произвольные значения + он может порождать объекты по требованию. Ещё делается попытка спрятать "приватные" данные, например пароль к DB.
Много писать не буду. Надеюсь код выглядит самодокументированным.
Файл конфигурации:
<?php
return array(
'classMap' => array(
'db' => 'MySql',
),
'db' => array(
'user' => 'ahgsh',
'password' => 'H78HgasT',
'prefix' => 'r1220_',
)
);
Код теста:
<?php
error_reporting(-1);
require './lib/qb.php';
header('Content-type: text/plain');
// Read configuration & set handlers
Qb::init();
// Try to read "secret" info
echo var_export(Qb::get('db.prefix'), TRUE) . "\n";
// Build or get already built component
$db = Qb::load('db');
// Test component
echo $db->query('SELECT * FROM :p_topics') . "\n";
// Try to read "secret" info
echo var_export(Qb::get('db.prefix'), TRUE) . "\n";
Выдача:
'r1220_'
SELECT * FROM r1220_topics
NULL
Ссылки по теме:
* http://martinfowler.com/eaaCatalog/registry.html
* http://en.wikipedia.org/wiki/Lazy_initialization
* http://en.wikipedia.org/wiki/Factory_pattern
* http://wiki.agiledev.ru/doku.php?id=ooad:dependency_injection
см. v.3 — обработка событий и ленивые объекты
Subversion: http://subversion.assembla.com/svn/qb7/cuts/registry/
Код во вложении: