Возможность настраиваемых классов, но с единым именем класса
Предположим, вы создаете веб-приложение, которое однажды станет упакованным продуктом, которое пользователи захотят расширить и настроить.
Он поставляется с базовой библиотекой, состоящей из файлов PHP, содержащих классы:
/library/
/library/frontend.class.php
/library/filesystem.class.php
/library/backend.class.php
Теперь предположим, что вы хотите сохранитьчистое ядро что пользователи не могут исправлять. Тем не менее, вы хотите, чтобы пользователь мог настроить каждую гайку и болт, если это будет необходимо.
Моя текущая идея состоит в том, чтобы создать механизм автозагрузки, который, когда создается экземпляр класса, сначала загружает ядро, включает:
/library/frontend.class.php
затем он переключается наuser
каталог и смотрит, есть ли включение с таким же именем:
/user/library/frontend.class.php
если таковой существует, он также включает это.
Очевидно, что пользовательское включение должно содержать определение класса, которое расширяет определение в основном включении.
Теперь мой вопрос: как бы я создал такой класс? В конце концов, я всегда могу быть уверен, что есть определение:
class frontend_core
но я не могу быть уверен, что есть
class frontend_user extends frontend_core
Тем не менее, я хотел бы иметь возможность полагаться и создаватьодно имя классанезависимо от того, было ли пользовательское расширение класса или нет.
Есть ли умный способ, идея или шаблон, как этого добиться?
Конечно, я мог бы написать простую фабричную вспомогательную функцию, которая ищетuser
сначала класс, а затем дляcore
class и возвращает инициализированный объект, но мне бы очень хотелось, чтобы это было как можно проще и понятнее, потому что, как я уже сказал, это будет упакованный продукт.
Я ищу умный трюк или шаблон, который использует как можно меньше кода и вводит как можно меньше новых функциональных возможностей.