Создание системы плагинов в PHP

В моем понимании плагин не должен сам себя загружать, так что нельзя писать в нем строку типа:

$plugins[] = new plugin_silencer();


Надо загружать его посредством ядра.

core.php

$code=file_get_contents("./class.php");
preg_match_all("/class ([\w]+) extends/",$code,$classes);
$classes=$classes[1][0];
include ("./class.php");
$pluginRUN=new $classes();
$pluginRUN->show();

Введем абстрактный класс, чтобы стандартизировать плагины

abstract class plugin
{
abstract public function show();
}

И напишем пример плагина

include "./pluginStandart.php";

class HelloWorld extends plugin
{
function show()
{
print("IT WORKS!!!");
}
}

 как видите сначалы мы загружаем плагин и получаем его класс, затем мы иницилизируем класс плагина и в конце вызываем стандартную функцию show() (помните, мы ведь ввели стандарт с помощью абстрактного класса).

Надо  отметить один недостаток, если вы вызовете два плагина с одинаковым классом, то у вас сгенерится ошибка, избежать такого можно либо проверкой на существование класса, перед загрузкой, либо запоминанием всех названий плагинов.

Удачного  плагиностроения, прогеры.


© Alexander Semion