Подскажите, где лучше хранить названия компонентов, непосредственно в классах и брать их вызовом get_name() или где-нибудь во внешнем ассоциативном массиве? Подскажите, как лучше сделать?
лучше конечно в классах, в синглетоне
класс унаследовать от ArrayAccess
и обращаться к этим свойствам как к элементам массива
upd
вот только не знаю, не пробовал ещё - можно ли класс extends ArrayAccess использовать как многомерные массивы? а то мне щас приходится в методах global объявлять для нужных конфигурационных переменных..
class Register {
static $stack;
/**********************************************************************************************
* Положить объект в хранилище
**********************************************************************************************/
static function set_entry($key, &$item)
{
Register::$stack[$key] = &$item;
}
/**********************************************************************************************
* Взять объект из хранилища
**********************************************************************************************/
static function &get_entry($key)
{
return isset(Register::$stack[$key])?Register::$stack[$key]:false;
}
/**********************************************************************************************
* Проверить наличие объекта в хранилище
**********************************************************************************************/
function is_entry($key)
{
return ($this->get_entry($key) !== null);
}
}
Работа:
PHP:
Register::set_entry("db_drv", new cMySQL(DB_HOST, DB_NAME, DB_USER, DB_PASSWORD));
...
...
...
//
$db_drv = Register::get_entry("db_drv");
$db_drv->query("select * from table");
Осталось все таки добавить "нормальный" Singleton ( а не просто статик ) и, как сказал triumvirat, добавить интерфейс ArrayAccess.
А также понять, почему метод is_entry является не статическим , как остальные в твоем классе;