Наверху иерархии классов блоголёта находится класс TDataClass, который располагается в файле dataclass.php В TDataClass классе сосредоточены базовые понятия и идеология блоголёта. Методы TDataClass можно разделить на две группы: сохранения и восстановление данных (собственно откуда и слово Data в названии класса) а также методы для работы со свойствами объекта.

Начнем разбор класса TDataClass. Центральным свойством класса является Data - это массив, прошу обратить внимание - это свойство используется во всех дочерних классах, и следовательно во всей библиотеке классов блоголёта. Все ниже описанные методы работают с этим свойством. Это массив в котором следует располагать данные, которые необходимо сохранять и восстанавливать, в частном случае блоголёта - это файлы, но теоретически предполагается возможность хранить данные и в СУБД или еще каком нибудь хранилище данных. Для сохранения/восстановления Data сериализуется в строку и обратно, для этого служат два метода:


public function SaveToString()
public function LoadFromString($s)

Эти методы используются в других методах класса, которые собственно и работают файлами:


public function Load()
public function Save()

Чтобы знать, в какой конкретно файл сохранять и откуда брать данные служит метод GetBaseName(); который по умолчанию возвращает значение свойства basename. Если имя файла для хранения динамически меняется, то следует перекрыть этот метод.

В блоголёте если вы изменили данные, то вам необходимо их сохранить, для этого вызываем у удобном для вас месте метод класса Save() Но поскольку реальна ситуация, когда идут многочисленные вложенные вызовы методов и было бы по меньшей мере расточительной глупостью, каждый раз сохранятся в файл, то предусмотрен простой способ решить эту проблему - это два метода класса Lock() и Unlock() - их следует всегда вызывать парами: перед внесением изменений в данные Lock() и в конце блока изменений Unlock() Эти методы работают просто - увеличивают и уменьшают внутренний счетчик private $LockCount; и если он обнуляется, то данные сохраняются в файл. Таким образом достаточно соблюдать парные вызовы Lock() Unlock(), чтобы перестать заботиться об лишних сохранениях. Если внутри пары Lock() Unlock() сделать вызов Save() то данные не будут сохранены, так как внутренний счетчик больше нуля.

Ко второй группе методов класса TDataClass относятся методы работы со свойствами. Это всего два волшебных метода php __get и __set Эти методы превращают TDataClass и всех его потомков в мощнейший инструмент разработчика. Смотрите - в массиве Data мы добавили элементы, для примера рекомендую посмотреть класс TPost в файле postclass.php (это класс который управляет записями) и эти элементы массива сразу же становятся свойствами объекта. Например внутри класса вы сделали $this->Data['key'] = 'value'; тогда же сразу становится доступным свойство key:


echo $Obj->key;
$Obj->key = 'new value';

Новые свойства вы можете определять только внутри самого класса, поскольку Data является protected свойством TDataClass. Другой замечательной особенностью класса является возможность вызывать функции для присвоения или получения значений. Вы может например вовсе не добавлять в Data новый элемент массива, а реализовать пару методов вида Getpropname, Setpropname, где propname - имя свойства, для предыдущего примера это будет Getkey и Setkey - если эти методы будут существовать, то при обращении к этим свойствам будут вызваны методы, а иначе проверен массив Data, и если там не будет найдено свойство, то будет вызван метод Error, который по умолчанию создает исключительную ситуацию, которая в случае ее не обработки приведет к остановки выполнения скриптов и выводу соответствующего сообщения.

Оставшиеся свойства и методы носят утилитарный характер, например CacheEnabled - указывает, разрешено ли кеширование сгенерированной потомком страницы, не во всех классах используется. Install() и Uninstall() являются скорее абстрактными - в них в TDataClass ничего не делается и предназначены они для перекрытия их в потомках - они используются во время установки и удаления класса в блоголёте.