О перезаписи методов/свойств в PHP. Как лучше сделать такое?
Всех приветствую.
1. К примеру есть карточка товара. И есть базовый класс Product. В нем есть св-ва, допустим: цена, алиас, описания, изображения. Есть методы, CRUD, пересчет цены со скидками/купонами, многоуровневого образования цен, обрезки изображений и пр.
2. В чем суть. Необходимо чтобы было что-то типа "плагинов". Например, нужен плагин который будет перед выводом описания, реплейсить в нем [[product_name]] на product_type+product_name. Или, плагин который будет вставлять в поле "алиас" транслит поля "имя товара".
3. По логике напрашивается решение - расширить класс Product, и в расширенный класс пихать нужный функционал. Но плагинов может быть ОЧЕНЬ много. На разных доменах/страницах/рубриках использоваться могут разные плагины. Поэтому хочется более изящного решения.
4. Я это вижу как то так (фантазирую=)) ): создается папка "plugins" в нее кидаются *.php файлы, каждый из которых представляет собой логически плагин, а на уровне языка является - классом. Классом Product, в котором просто перезаписаны ТОЛЬКО НУЖНЫЕ методы/свойства. (PHP при подобной попытке перезаписи напишет "Fatal error: Cannot redeclare class ..." )
Собственно в этом и заключается вопрос. 1) Как решить изящнее такую задачку на голом PHP 2) Ее же на Yii (может там что-то предусмотрено для подобного рода проблем)
Как я понял аналог множественного наследования. Это гуд конечно. Но все таки, как быть если нужно ПЕРЕЗАПИСАТЬ существующие методы/свойства? Бехавиоры как я понял не перезапишут, а просто ДОПОЛНЯТ функционал. Получается только плодить кучу классов/трейтов от которых потом наследоваться, создавая лишнюю прослойку. Нет способа изящнее? Я о перезаписи методов/свойств.
Трейты находятся снизу в цепочке наследования, т.е. класс Product будет по отношению к ним - дочерним. Из них(насколько понимаю) нельзя перезаписать методы/свойства Product, можно просто дополнить его, расширить функционал.