Плагин Архитектура в PHP - PullRequest
       33

Плагин Архитектура в PHP

5 голосов
/ 23 февраля 2010

Я планирую провести исследование о том, как реализовать архитектуру плагинов в PHP. Я пытался найти в Интернете возможные ссылки, но подумал, что, возможно, мой поиск хорошей ссылки будет быстрее и более актуальным, если я задам вопрос здесь.

Кто-нибудь здесь пробовал использовать архитектуру плагинов для веб-проектов?

Спасибо, Эрвин

Ответы [ 5 ]

4 голосов
/ 23 февраля 2010

Я написал плагины для WordPress, и волшебство, на которое они опираются, это «Имена переменных функций». Например, это правильный php, в котором будет вызван вызов функции phpinfo ():

$func_name="phpinfo";
$func_name();

Это позволяет разработчику «перехватывать» вызовы функций, как при переопределении их своими собственными функциями без изменения остальной части приложения. Модули Linux Kernel все о «перехвате», они не будут работать без этого поведения.

К сожалению, для имен переменных PHP-функций это отвратительный хак, который потребляет много ресурсов. Все функции в пространстве имен помещаются в список, и этот список необходимо искать, хотя перед вызовом функции это O (log2 (n)). Также имейте в виду, что имена переменных функций не могут быть должным образом ускорены в HipHop, хотя код все равно будет преобразован в действительный C ++. Лучшим подходом было бы повторно объявить функции, как вы можете в python, что было бы сложностью O (1), но команда разработчиков PHP HATES эту идею (Да, я попросил эту функцию!) .

Удачи!

1 голос
/ 19 ноября 2016

Существует множество концепций, которые можно считать «плагином». Вы можете написать систему плагинов используя:

0 голосов
/ 11 ноября 2011

не забывайте о функции __ autoload . Вы можете динамически загружать компоненты. как:

SomeModule::test();

function __autoload($class)
{
   $class = preg_replace('/^\W/', '', strtolower($class));
   include 'modules/'.$class.'.php';
}
0 голосов
/ 11 ноября 2011

А как насчет этих двух классов

  1. Плагин Обработчик / Загрузчик
  2. Plugin

и есть некоторые правила

  1. Plugin Handler / Loader является одноэлементным классом и управляет всеми дочерними предложениями класса Plugin.
  2. Все плагины должны быть унаследованы от класса плагинов.
  3. Плагин Class будет иметь предопределенные свойства и методы, которые могут быть перезаписаны его дочерними классами, поэтому альтернативный метод для перехвата системы (но я не уверен в существенном различии результатов).

Например, скажем, у класса Plugin есть свойство url_routes со значением по умолчанию пустого массива, затем дочерний класс может перезаписать и добавить любые необходимые URL-адреса в этот массив.

Плагин-обработчик / загрузчик добавит эти URL-маршруты из дочернего класса в базовую систему.

0 голосов
/ 23 февраля 2010

Вы можете взглянуть на то, как Zend Framework реализовал свой компонент Plugin Loader.

По сути, вы устанавливаете путь к месту хранения плагинов, и загрузчик пытается загрузить первый плагин, найденный способом LIFO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...