/** * Создание экземпляра класса для сущности фолдинга. * Если по каким-либо причинам экземпляр не может быть создан - выбрасываем ошибку. * * @return FoldedClass */ public final function getEntityClassInst($ident, $cache = true) { /* @var $CACHE SimpleDataCache */ $CACHE = $cache ? SimpleDataCache::inst($this->unique('CLASSES-CACHE')) : null; //--- if ($CACHE && $CACHE->has($ident)) { return $CACHE->get($ident); } $classPath = $this->getClassPath($ident); //Подключим класс, не будем заставлять трудиться класслоадер require_once $classPath; //Построим название класса на основе идентификатора сущности $className = $this->ident2className($ident); if (!PsUtil::isInstanceOf($className, FoldedClass::getCalledClass())) { return PsUtil::raise('Класс для сущности {} не является наследником {}', $this->getTextDescr($ident), FoldedClass::getCalledClass()); } //Получим FoldedEntity, так как её потом нужно будет передать в конструктор $foldedEntity = $this->getFoldedEntity($ident); //Создаём экземпляр $inst = new $className($foldedEntity); //Отлогируем $this->LOGGER->info('Instance of {} created.', $className); FoldedResourcesManager::onEntityAction(FoldedResourcesManager::ACTION_ENTITY_INST_CREATED, $this, $ident); return $CACHE ? $CACHE->set($ident, $inst) : $CACHE; }