В движке есть несколько базовых классов, от которых порождены все классы блоголёта, а именно это tdata, tevents, titems, titem. В новой 4 версии добавил пару классов для работы с файловыми данными: tfilestorage и tstorage - они получились путем извлечения соответствующих методов из tdata. Это преамбула, а сказка в том, что внутри tdata используется класс litepublisher из корневого index.php, где подключаются остальные классы, а именно tclasses, tsite, toptions, turlmap. Эти классы являются потомками от tdata и следовательно получается зацикливание включений и зависимостей. Строгий подход к разработке требует строгой иерархии (по возможности) и минимум зависимостей.

Задача - убрать зависимости, а точнее сделать класс tdata абсолютно автономным. Этому препятствует класс из litepublisher::$paths - пути к папкам движка, для сохранения и восстановления файлов. Можно, конечно, декларировать этот класс в tdata, но тогда где то придется все равно устанавливать пути к папкам движка, как это сейчас происходит в корневом файле. Чтобы класс был доступен из корневого index.php его надо как то включить, предварительно определив пути к папкам, а сделать это нигде нельзя, кроме как в корневом файле. Следовательно задачу надо ставить по иному: в модуле tdata декларировать некий интерфейс, который бы потом в корневом файле связывался с имеющимися там данными. Подходящим решением было бы перенос служебного класса tpaths из корневого index.php и последующим связыванием с litepublisher::$_paths;. Это осуществимо. Единственная проблема этого решения - это переименование litepublisher::$paths во всем движке в нечто другое. litepublisher::$paths мне нравится тем, что является самоописательным- пути в litepublisher.

Решение пока отсутствует. Симметричным образом надо разрулить присутствие litepublisher::$options в tdata - по тем же соображениям зацикливания. Наклевывается новый абстрактный класс system. Ситуацию можно разрулить и по иному: в корне декларировать класс litepublisher в неизменном виде, а всю последующую логику вынести в отдельный модуль в lib. Можно переформулировать вопрос по новому - кто стоит в самом начале всех классов? tdata или litepublisher? В ответе на этот вопрос и будет заключаться решение зацикливания. Сложность заключается в разнице между иерархией включаемых файлов и наследованием классов. На вершине включения всегда находится корневой файл index.php, когда как на вершине наследования стоит класс tdata. Вот и получается двуглавый орел. Следует привести положение дел к одному файлу и классу на вершине.

Пока что буду думать, каким образом разрулить все это с минимальной потерей крови - чтобы не пришлось редактировать все файлы движка.