Ejemplo n.º 1
0
 /**
  * Метод возвращает экземпляр класса, подключающего библиотеки.
  * Для переопределения этого класса, на уровне проектного config.ini
  * должен быть задан другой класс, отвечающий за подключение библиотек.
  * 
  * Это позволит:
  * 1. Использовать стандартизованный метод подключения внешних библиотек
  * 2. Переопределить подключение библиотек из SDK
  */
 public static final function inst()
 {
     if (isset(self::$inst)) {
         return self::$inst;
         //----
     }
     /*
      * Получим название класса, отвечающего за подключение библиотек
      */
     $class = ConfigIni::libsIncluder();
     /*
      * Подготовим директории
      */
     $SDK_LIB_DIR = DirManager::inst(PS_DIR_INCLUDES, DirManager::DIR_LIB)->absDirPath();
     $PROJ_LIB_DIR = DirManager::inst(PS_DIR_ADDON, DirManager::DIR_LIB)->absDirPath();
     /*
      * Класс подключения библиотек совпадает с базовым
      */
     if (__CLASS__ == $class) {
         self::$inst = new PsLibs();
         self::$inst->SDK_LIB_DIR = $SDK_LIB_DIR;
         self::$inst->LOGGER = PsLogger::inst($class);
         self::$inst->LOGGER->info('Libs includer  SDK: [{}]', __FILE__);
         self::$inst->LOGGER->info('Libs directory SDK: [{}]', $SDK_LIB_DIR);
         return self::$inst;
         //---
     }
     /*
      * Нам передан класс, который отличается от SDK
      */
     $classPath = Autoload::inst()->getClassPath($class);
     if (!PsCheck::isNotEmptyString($classPath)) {
         return PsUtil::raise('Не удалось найти класс загрузчика библиотек [{}]', $class);
     }
     /*
      * Указанный класс должен быть наследником данного
      */
     if (!PsUtil::isInstanceOf($class, __CLASS__)) {
         return PsUtil::raise('Указанный загрузчик библиотек [{}] не является наследником класса [{}]', $class, __CLASS__);
     }
     self::$inst = new $class();
     self::$inst->SDK_LIB_DIR = $SDK_LIB_DIR;
     self::$inst->PROJ_LIB_DIR = $PROJ_LIB_DIR;
     self::$inst->LOGGER = PsLogger::inst($class);
     self::$inst->LOGGER->info('Libs includer  CUSTOM: [{}]', $classPath);
     self::$inst->LOGGER->info('Libs directory    SDK: [{}]', $SDK_LIB_DIR);
     self::$inst->LOGGER->info('Libs directory CUSTOM: [{}]', $PROJ_LIB_DIR);
     return self::$inst;
     //---
 }