Я планирую провести исследование о том, как реализовать архитектуру подключаемого модуля в PHP. Я попытался найти в Интернете возможные ссылки, но я подумал, что, может быть, мой поиск хорошей справки будет более быстрым и более уместным, если я попрошу здесь.
Кто-нибудь здесь пытался использовать плагиновую архитектуру для веб-проектов?
Спасибо, Эрвин
Я написал плагины WordPress, и магия, на которую они полагаются, – «Переменные имена функций». Например, это действительный php, в котором вызов функции phpinfo () будет вызываться:
$func_name="phpinfo"; $func_name();
Это позволяет разработчикам выполнять вызовы функций «Hook», как в случае переопределения их собственными функциями без изменения остальной части приложения. Модули ядра Linux полностью связаны с «подключением», они не будут работать без такого поведения.
К сожалению для имен переменных переменной PHP это отвратительный хак, который потребляет много ресурсов. Все функции в пространстве имен помещаются в список, и этот список нужно искать, пока перед вызовом функции это O (log2 (n)). Также имейте в виду, что переменные имена функций не могут быть ускорены надлежащим образом в HipHop, хотя код все равно будет преобразован в действительный C ++. Лучшим подходом было бы повторно объявить такие функции, как вы можете в python, что было бы сложностью O (1), но команда разработчиков PHP HATES эта идея (да, я просил эту функцию!).
Удачи!
Существует много концепций, которые можно рассматривать как «плагин». Вы можете написать систему плагинов, используя:
Вы можете посмотреть, как Zend Framework реализовал свой компонент Plugin Loader
.
В основном вы устанавливаете путь к тому, где хранятся плагины, и загрузчик пытается загрузить первый плагин, найденный в LIFO.
Что относительно этих двух классов
и есть некоторые правила
Например, скажем, класс Plugin имеет свойство url_routes со значением по умолчанию для пустого массива, тогда дочерний класс может перезаписывать и добавлять любые требуемые URL-адреса в этом массиве.
Обработчик плагинов / загрузчик затем добавит эти маршруты URL из дочернего класса в базовую систему.
не забывайте о функции __autoload . вы можете динамически загружать компоненты. как:
SomeModule::test(); function __autoload($class) { $class = preg_replace('/^\W/', '', strtolower($class)); include 'modules/'.$class.'.php'; }