О перезаписи методов/свойств в 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 (может там что-то предусмотрено для подобного рода проблем)
1) Одним из возможных решений на чистом PHP может быть использование интерфейсов и трейтов. Вы можете создать интерфейс для плагинов, который будет определять методы, которые должны быть реализованы в плагине. Затем вы можете создать трейты с реализацией этих методов, которые будут включаться в класс Product при необходимости. Таким образом, вы сможете добавлять функционал из плагинов в класс Product без необходимости наследования и переопределения методов.
2) В Yii также можно использовать трейты для добавления функционала в классы. Вы можете создать трейт для каждого плагина и загружать их динамически при необходимости. Yii также предоставляет возможности для расширяемости через модули и компоненты, которые можно использовать для добавления функционала в классы.
Надеюсь, это поможет вам найти изящное решение для вашей задачи.
1) Одним из возможных решений на чистом PHP может быть использование интерфейсов и трейтов. Вы можете создать интерфейс для плагинов, который будет определять методы, которые должны быть реализованы в плагине. Затем вы можете создать трейты с реализацией этих методов, которые будут включаться в класс Product при необходимости. Таким образом, вы сможете добавлять функционал из плагинов в класс Product без необходимости наследования и переопределения методов.
2) В Yii также можно использовать трейты для добавления функционала в классы. Вы можете создать трейт для каждого плагина и загружать их динамически при необходимости. Yii также предоставляет возможности для расширяемости через модули и компоненты, которые можно использовать для добавления функционала в классы.
Надеюсь, это поможет вам найти изящное решение для вашей задачи.