Вариант реализации паттерна 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 не выводит подсказки, методы этого объекта, а хотелось бы. Может кто нибудь знает как?