Ich bin auf der Suche nach einer eleganten Möglichkeit, wie ich es Plugins ermöglichen kann sich an definierten Punkten in den Programmfluss einhaken zu können und diesen zu beinflussen. Dies wäre sehr praktisch für Webaplikationen aber ich brauche es momentan auch für eine andere Sache, daher poste ich ins allgemeine Forum. Die Idee habe ich von dem Boardsystem PunBB und dessen sehr coolem Plugin-System das folgendermaßen funktioniert.
Ich habe meinen Code und darin definiere ich sogenannte Hooks, das sieht dann so aus:
Code: Alles auswählen
[Code...]
($hook = get_hook('li_login_form_submitted')) ? eval($hook) : null;
[Code...]
An dieser Stelle können dann Plugins ihren zusätlichen Code einhängen. Unschön ist natürlich das eval - das kommt daher, dass die Codergänzungen in einer XML-Datei stehen, das will ich natürlich nicht so machen.
Am liebsten wäre es mir daher, wenn ich an dieser Stelle Funktionen einhängen kann, die dann aufgerufen werden, mal grob ungefär so:
Und im Plugin irgendwie sowas:
Code: Alles auswählen
def myFunction():
...
hooks['some_hook_name'].append(myFunction)
Nur kann ich nicht so einfach auf Variablen in dem Namensraum außerhalb des Funktionsaufrufes zugreifen. global geht hier ja auch nicht, weil die Funktion an einer anderen Stelle definiert wird und das globals-array erlaubt laut Doku keinen Schreibzugriff.
Nun ist meine Frage ob jemand eine Idee hat dies elegant zu lösen.
Freue mich schon auf Vorschläge.