К хорошему привыкаешь быстро :) Благодаря почерпнутым здесь и не только новым знаниям, я нашел то что искал.
Вариант реализации паттерна Registry, за основу взял его
здесь. Добавил возможность подгружать необходимые мне объекты как синглтон в нужных местах, это то что я давно хотел но не понимал как :) + Узнал о "волшебной" функции __autoload которая избавляет меня от кучи инклудов в коде. Собственно вот код Registry, покритикуйте если что не так на ваш взгляд:
class Registry
{
private static $_instance =
null;
protected
$_oSmarty;
protected
$_oDb;
protected
$_oCurl;
protected
$_oTopic;
protected
$_oTag;
protected
$_oMuzRu;
protected
$_oYtube;
protected
$_aSet;
protected
function __construct
() {
$this->_oSmarty =
new Smarty;
$this->_oDb = Database::
get();
$this->_oCurl =
new Curl;
$this->_oTopic =
NULL;
$this->_oTag =
NULL;
$this->_oMuzRu =
NULL;
$this->_oYtube =
NULL;
$this->_aSet =
NULL;
}
public static function init
($instance) {
self::
$_instance =
new $instance();
if (!self::
$_instance instanceof Registry
) {
throw
new Exception
('');
}
}
private static function getInstance
() {
if (!self::
$_instance) {
self::
init('Registry');
}
return self::
$_instance;
}
public static function getDb
() {
return self::
getInstance()->_oDb;
}
public static function getSmarty
() {
return self::
getInstance()->_oSmarty;
}
public static function getCurl
() {
return self::
getInstance()->_oCurl;
}
public static function getTopic
() {
if (self::
getInstance()->_oTopic ===
NULL) {
self::
getInstance()->_oTopic =
new Tac
('topic');
}
return self::
getInstance()->_oTopic;
}
....
private function __clone
() {}
}
Вообщем все отлично и работает, вопрос связан с IDE netbeans, она не понимает вызова объекта таким способом:
$oTopic = Registry::getTopic();
Т.е. потом netbeans не выводит подсказки, методы этого объекта, а хотелось бы. Может кто нибудь знает как?