PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie funktioniert ein Plugin System?


Gast
2007-12-07, 07:26:24
Man hört es immer wieder, viele Programme haben Plugins die das Hauptprogramm um gewissen Fähigkeiten erweitert, aber wie funktionieren
Plugins eigentlich programmiertechnisch gesehen?

Reine Funktionssammlungen sind es ja wohl nicht.
Wie wird also die Interaktion zwischen Hauptgrogramm und Plugin realisiert?

darph
2007-12-07, 07:50:20
Ganz einfache Systeme kannst du zum Beispiel über Hooks definieren. Du definierst ein Interface mit Methoden und deren Signaturen. Die werden von den Plugins implementiert. Das Plugin meldet sich bei einer Pluginverwaltung an und sagt: Ich mach bei dem Hook was.

Und wenn das Programm dann irgendwas macht, werden im Zuge dessen alle Plugins, die sich dafür angemeldet haben, ausgeführt.


class myPlugin implements IPlugin {
function perform($text) {
return "<b>".$text."</b>";
}

}
PluginHandler::getInstance()->register(new myPlugin(), "myHook");


class myOtherPlugin implements IPlugin {
function perform($text) {
return "<i>".$text."</i>";
}

}
PluginHandler::getInstance()->register(new myOtherPlugin(), "myHook");


class PluginHandler() {
// is a singleton

function getInstance() {
// you get the idea
}

function register($plugin, $hook) {
$this->pluginsArray[$hook][] = $plugin;
/* this is ugly, because we neither check credibility of
the plugins nor the hooks. Besides, one large superarray
is kinda not beautiful. */
}

function perform($hook, $parameter) {
foreach ($this->pluginsArray[$hook] as $plugin) {
$parameter = $plugin->perform($parameter);
}
return $parameter;
}

}



$handler = PluginHandler::getInstance();
$text = getTextFromDB(); // … somehow
$text = $handler->perform("myHook", $text);
echo($text);


Jetzt hast du einen Text ausgegeben, der sowohl fett, als auch kursiv ist.

Neomi
2007-12-07, 12:56:23
Im letzten Thread zu dem Thema habe ich ein recht ausführliches Beispiel gepostet, vielleicht ist das ja interessant für dich...
http://www.forum-3dcenter.org/vbulletin/showthread.php?t=376449

Gast
2007-12-08, 01:54:03
THX, ich werde mir das mal alles durchlesen.