Ошибка: "Циклическое наследование" в Engine autoload
Здравствуйте, на одном из проектов у меня выскочила ошибка «циклического наследования».
Что я имею в виду:
При попытке вызова функции $this->User_GetUserById(....);
получаю ошибку
И эта ошибка не устраняется при отключении плагина. При дальнейшем исследовании проблемы установил print на функцио Engine::autoload:
И получил следующий вывод:
Подскажите, в какую сторону копать?
Версия движка 1.0.3
Что я имею в виду:
При попытке вызова функции $this->User_GetUserById(....);
получаю ошибку
PHP Fatal error: Class 'PluginAdminusers_Inherit_ModuleUser_EntityUser' not found in /var/www/augme/www/plugins/adminusers/classes/mo dules/user/entity/User.entity.class.php on line 11
И эта ошибка не устраняется при отключении плагина. При дальнейшем исследовании проблемы установил print на функцио Engine::autoload:
/** * Автозагрузка классов * * @param string $sClassName Название класса * @return bool */ public static function autoload($sClassName) { $aInfo = Engine::GetClassInfo( $sClassName, Engine::CI_CLASSPATH|Engine::CI_INHERIT ); if($aInfo[Engine::CI_INHERIT]){ $sInheritClass = $aInfo[Engine::CI_INHERIT]; $sParentClass = Engine::getInstance()->Plugin_GetParentInherit($sInheritClass); >>>>>>>>>>>>>>>> print "{$sClassName}::{$sParentClass}\n"; if(!class_alias($sParentClass,$sClassName)){ dump("(autoload $sParentClass) Can not load CLASS-file"); } else { return true; } }elseif($aInfo[Engine::CI_CLASSPATH]){ require_once $aInfo[Engine::CI_CLASSPATH]; return true; }elseif(!class_exists($sClassName)){ dump("(autoload $sClassName) Can not load CLASS-file"); dump($aInfo); //throw new Exception("(autoload '$sClassName') Can not load CLASS-file"); } return false; }
И получил следующий вывод:
PluginTgroups_Inherit_ModuleUser_EntityUser::PluginAuras_ModuleUser_EntityUser
PluginAuras_Inherit_ModuleUser_EntityUser::PluginGmetourn_ModuleUser_EntityUser
PluginGmetourn_Inherit_ModuleUser_EntityUser::PluginInventory_ModuleUser_EntityUser
PluginInventory_Inherit_ModuleUser_EntityUser::PluginGmeprofileactivity_ModuleUser_EntityUser
PluginGmeprofileactivity_Inherit_ModuleUser_EntityUser::PluginTranslatetosocial_ModuleUser_EntityUser
PluginTranslatetosocial_Inherit_ModuleUser_EntityUser::PluginGmemoderator_ModuleUser_EntityUser
PluginGmemoderator_Inherit_ModuleUser_EntityUser::PluginGmestuff_ModuleUser_EntityUser
PluginGmestuff_Inherit_ModuleUser_EntityUser::PluginGmetags_ModuleUser_EntityUser
PluginGmetags_Inherit_ModuleUser_EntityUser::PluginExp_ModuleUser_EntityUser
PluginExp_Inherit_ModuleUser_EntityUser::PluginSitemap_ModuleUser_EntityUser
PluginSitemap_Inherit_ModuleUser_EntityUser::PluginUsermedals_ModuleUser_EntityUser
PluginUsermedals_Inherit_ModuleUser_EntityUser::PluginAnonymousaccess_ModuleUser_EntityUser
PluginAnonymousaccess_Inherit_ModuleUser_EntityUser::PluginAdminusers_ModuleUser_EntityUser
PluginAdminusers_Inherit_ModuleUser_EntityUser::PluginTgroups_ModuleUser_EntityUser
Подскажите, в какую сторону копать?
Версия движка 1.0.3
13 комментариев
кеш включен?
один из примеров сбоя — сделать константу в наследуемую сущность и получать её из другого участка кода до того момента, как в движке появится первый объект такой сущности. Движок через автозагрузку получит такую сущность, а не через метод
GetEntity
ядра, который должен создать цепочку наследования и в таком случае в цепочке наследования получается анархия со всеми последствиями.поэтому такой вопрос: есть ли у вас, например, константы, которые вы получаете из наследуемого объекта, который не был должным образом проинициализирован?
т.е. хочу сказать что то, что может показаться рабочим, просто пока совпало так (баг на баг).
но это как раз очень похоже на то, что я описал. Рекомендую просмотреть все сущности на константы, например, т.к. они первые кто такую ситуацию может создать (все сущности которые создали «кольцо»).
т.к. если работать нормально через веб-сервер то все нормально
т.е. проблема точно в коде инициализации тестов должно быть но пока не вижу где
Если бы проблема была в плагинах то они не работали бы и при заходе через браузер на сервер