В существующей модели движка есть естественные ограничения на количество (и (или) состав свойств поста. Для блога есть все необходимые свойства, но вот ставится задача сделать тикет систему, систему документации по движку, сайт исходников движка. Для простого контента достаточно поста, но для каждой из задач требуются дополнительные свойства. Как же их добавить? Например wordpress (и его аналоги) имеют специальную таблицу так называемых метаданных - произвольное количество пар название = значение. На мой взгляд это лишь данные, но не свойства. Поясню на простом примере: задаем контент поста $post->content = $somecontent;, и в результате будут заполнены соответствующим образом такие свойства как rawcontent, rss, excerpt, filtered. Дополнительная таблица данных вообще никак эту задачу не решает, да и собственно дополнительная таблица это мелочь, не стоящая особого внимания.

Хочется примерно следующего - создается свой собственный класс (непонятно пока - то ли наследник, то ли поддерживать особый интерфейс), после чего этот класс присоединяется к базовому классу. Тогда создавая экземпляр $post = tpost::instance($id); объект будет имеет присоедененые свойства. В простых случаях это решается обыкновенным наследованием нового класса от tpost, и функция создания нового поста должна будет создавать экземпляры нового класса. А что если сторонний разработчик сделал свой собственный класс наследник? Множественного наследования непредусмотрено. Как быть?

Задачу можно сформулировать по другому - встроить (добавить) внутрь класса новые функции, но без наследования от этого класса. Я бы это назвал класс - сателлит (спутник). Кстати вполне интересная мысль - если функция/свойство не найдено, то делается обход сателлитов (спутников - сожителей). Назову это дело c-oclass, по русски сокласс (со-трудник, со-отечественик). И это дело включить в ядро блоголёта наравне с уже реализованной моделью событий. Ограничения - невозможность использования protected методов базового класса.

Отличная идея, которую очень легко реализовать - я ее сейчас же и реализую в ядре блоголёта. Добавлю новые методы для управления соклассами - добавить, удалить. Вызовы соклассов поставлю в волшебных методах: __get, __set, __call.