Извините, мой титул не велик, это мой первый настоящий толчок при переходе на 100% к ОО, поскольку я был процедурным в течение многих лет, чем я помню. Мне трудно понять, возможно ли то, что я пытаюсь сделать. В зависимости от мыслей людей о 2 следующих пунктах, я пойду по этому пути.
CMS, которую я собираю, - это небольшая цитата, однако она очень сильно фокусируется на различных типах контента. Я мог бы легко использовать Drupal, с которым мне очень комфортно, но я хочу дать себе действительно веские причины для перехода к шаблонам проектирования / OO-PHP
1)
Я создал базовый класс контента, который я хотел бы расширить для работы с разными типами контента. Например, базовый класс обрабатывает содержимое HTML, а расширения могут обрабатывать вывод XML или PDF. С другой стороны, в какой-то момент я могу пожелать полностью расширить базовый класс для данного проекта. То есть если класс «content-v2» расширенный класс «content» для этого сайта, любые вызовы этого класса должны фактически вызывать «content-v2». Это возможно?
Если код создает экземпляр объекта типа «контент» - я на самом деле хочу, чтобы он создал экземпляр объекта типа «контент-v2» ... Я могу видеть, как это сделать, используя наследование, но, похоже, это связано со ссылкой на класс явно, я не вижу, как связать класс, который я хочу использовать вместо него динамически.
2)
Во-вторых, то, как я сейчас это строю, ужасно, я не доволен этим. Это действительно очень линейно - то есть получить информацию о сеансе> получить контент> построить навигацию> страницу темы> опубликовать. Для этого все объекты называются 1 на 1, что очень статично. Мне бы хотелось, чтобы он был более динамичным, чтобы я мог добавить его позже (очень тесно связанный с первым вопросом).
Есть ли способ, что вместо того, чтобы мой класс оркестратора вызывал все остальные классы 1 на 1, а затем собирал все целиком в конце, вместо этого каждый из других классов мог бы «прослушивать» определенные события, а затем в подходящей точке прыгать и делать их, но? Таким образом, классу оркестровщика не нужно будет знать, какие другие классы требуются, и называть их 1 на 1.
Извините, если я все это запутал в своей голове. Я пытаюсь построить это так, чтобы это было действительно гибко.