@Misha7

Возможно ли добавить метод в класс с помощью php?

Возможно ли добавить метод в класс с помощью php скрипта без костылей. Например пользователю необходимо добавить функционал в cms. Он загружает скрипт, скрипт автоматически добавляется в качестве метода контроллера. Или более грамотно загружать сам контроллер?
  • Вопрос задан
  • 2394 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Давайте определимся с тем что есть контроллер. Контроллер это какой-то компонент который управляет пользовательским вводом/выводом и на основе оного решает что делать собственно. В контексте WEB это некая штука, которая на вход принимает запрос а на выход должна вернуть ответ.

Если говорить в контексте ООП - у вас может быть один класс контроллер на запрос/страницу. И таких классов может быть бесчисленное множество. У вас может быть иерархия контроллеров. Да что угодно может быть.

Если вы хотите сделать расширяемую и главное удобно расширяемую логику - посмотрите в сторону dependency injection и аннотаций. Правда учитывая специфику запроса о чем-то хорошем наверное стоит просто забыть. Если хотите написать еще одну CMS - могу дать пару забавных идей. Так хоть CMS будет отличаться от миллионов существующих.

Но если отвечать на поставленный вопрос - проблема решается композицией классов, рефлексиями и ресолвом нужного метода в массиве контроллеров. По хорошему за это должен отвечать маршрутизатор запросов а "плагин" должен просто регистрировать маршрут либо подписываться на какие-то системные ивенты.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
passshift
@passshift
php, js, html5, css
Обычно принято оформлять такое в виде плагинов. Т.е. вся система должна быть изначально построена на плагинах в обертке, тогда все будет работать и легко расширяться.
Ответ написан
Комментировать
@EgorVorozhtsov
идея не очень хорошая) но как еще один вариант - использовать трейты
Ответ написан
Комментировать
@Misha7 Автор вопроса
Всем спасибо за внимание к вопросу! Нашел статью на хабре habrahabr.ru/post/57024.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы