Сразу предупреждаю - этот пост является абстрактным рассуждением. В блоголёте в теме значение html тегов содержаться в переменных php. В старой версии необходимые для парсинга переменные объявлялись в как локальные в функции парсинга шаблона. Сам шаблон парсился штатными средствами php. В новой версии шаблон парситься регэкспом, а значения переменных берется из $GLOBALS. Как старый, так и новый метод содержит потенциальную возможность не исполнения шаблона. К примеру переменная не была ранее объявлена (как локальная в старой версии, и как глобальная в новой). С другой стороны этого не происходит, так как таких переменных реально мало: $options, $template, $context, $post, $lang.

Следует думать про абстрактное будущее, и вероятное желание пользователей блоголёта расширить перечень таких переменных. С другой стороны заранее подготавливать переменные это путь в никуда - неизвестно, что потребуется, и следовать создавать только то, что используется. Именно этот принцип лежит в основе блоголёта - подгружаются исключительно только те классы, которые используются, что обеспечивает отличную производительность.

Еще в старой версии появились виртуальные свойства в $classes, а именно, если хочется получить класс управляющий всеми постами, то можно получить этот класс двумя альтернативными путями:


$posts = tposts::instance();
$posts = $classes->posts;

первая строка хороша тем, что ее можно вставить где угодно, вторая тем, что если в движке будет поменян базовый класс tposts на нечто иное, то будет получен как раз объект нового класса.

Остается только связать выше написанное. Если переменная не будет найдена в глобальных ($GLOBALS), то будет попытка получить ее от $classes. Чтобы $classes мог сопоставить запрашиваемое имя с именем класса есть свойство $classes->classes, которое является обычным ассоциативным массивом, который в любой момент можно изменить (добавить/удалить). Первоначальные значения устанавливаются из секции classes файла classes.ini при инсталляции.

Таким образом, пространство имен переменных темы блоголёта я расширю. Получается интересный трюк, отсутствующий в php - если переменная php, отсутствует то будет создан соответствующий этой переменной класс. Получились виртуальные переменные, так сказать on demand request...