О перезаписи методов/свойств в 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 (может там что-то предусмотрено для подобного рода проблем)

21 Авг 2019 в 07:08
155 +1
1
Ответы
1

1) Одним из возможных решений на чистом PHP может быть использование интерфейсов и трейтов. Вы можете создать интерфейс для плагинов, который будет определять методы, которые должны быть реализованы в плагине. Затем вы можете создать трейты с реализацией этих методов, которые будут включаться в класс Product при необходимости. Таким образом, вы сможете добавлять функционал из плагинов в класс Product без необходимости наследования и переопределения методов.

2) В Yii также можно использовать трейты для добавления функционала в классы. Вы можете создать трейт для каждого плагина и загружать их динамически при необходимости. Yii также предоставляет возможности для расширяемости через модули и компоненты, которые можно использовать для добавления функционала в классы.

Надеюсь, это поможет вам найти изящное решение для вашей задачи.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир