+4.25
Рейтинг
11.40
Сила

Антон

  • avatar Po6oT
  • 0
А вы случайно не знаете, как сделать, чтобы происходил редирект на новый адрес?
  • avatar aleks
  • 0
Привет,
объясните в чем глюк:
есть два плагина, которые наследуют один класс, скажем UserEntity модуля User
В пeрвом плагине пишем в файле PluginOne.class.php

class PluginOne extends Plugin
{
protected $aInherits=array(
'entity' => array('ModuleUser_EntityUser'=> PluginOne_ModuleUser_EntityUser'));

}
во втором то же самое
class PluginTwo extends Plugin
{
protected $aInherits=array(
'entity' => array('ModuleUser_EntityUser'=> PluginTwo_ModuleUser_EntityUser'));

}
файлы плагинов называются plugins/one/classes/modules/user/entity/User.entity.class.php и plugins/two/classes/modules/user/entity/User.entity.class.php соответственно
сами классы определяются так:
class PluginOne_ModuleUser_EntityUser extends PluginOne_Inherit_ModuleUser_EntityUser {....}
и
class PluginTwo_ModuleUser_EntityUser extends PluginTwo_Inherit_ModuleUser_EntityUser {....}

В итоге получаю такую ошибку:
Fatal error: Class 'PluginOne_ModuleUser_EntityUser' not found in /../engine/include/function.php(414): eval()'d code on line 1

В месте ошибки выполняется код:
eval('abstract class '. $alias. ' extends '. $original. ' {}');
где $alias это то самое PluginOne_Inherit_ModuleUser_EntityUser, а $original член массива $aInherits.
В данный момент( исключения ) в массиве $aInherits[ModuleUser_EntityUser] два члена, добавляемых каждым из плагинов:
вот части касающиеся имен классов
[inherit] => PluginOne_ModuleUser_EntityUser
и
[inherit] => PluginTwo_ModuleUser_EntityUser
В результате выполнения функции GetParentInherit() модуля Plugin, которая возвращает верх стека наследования, в данном случае PluginOne_ModuleUser_EntityUser, получаем выполнение функцией eval такого кода:
abstract class PluginOne_Inherit_ModuleUser_EntityUser extends PluginOne_ModuleUser_EntityUser;
Собственно на этом и произошла ошибка. Ведь PluginOne_ModuleUser_EntityUser еще не определен.
Мне кажется, что это работало бы, если раскручивать стек с другой стороны, т.е должна быть такая последовательность
abstract class PluginOne_Inherit_ModuleUser_EntityUser extends ModuleUser_EntityUser;
abstract class PluginTwo_Inherit_ModuleUser_EntityUser extends PluginOne_ModuleUser_EntityUser;
Т.е. надо переделывать функцию GetParentInherit().
Или я все-таки чего то не понимаю?