Hallo Forum,
ich versuche gerade ein sehr einfaches Plugin-System zu schreiben, welches auf Abhängigkeiten achtet und diese ggf. nach läd. Das Probelm ist, dass wenn ein Plugin vom dem anderen abhängig ist und das andere von dem einen, läuft alles out of memory. Zur Veranschaulichung:
class app {
protected static $loaded_plugins = array();
public function load ($str) {
if(!isset(self::$loaded_plugins[$str])) {
$class = 'plugin_'.$str;
self::$loaded_plugins[$str] = new $class();
}
}
}
class plugin extends app {
protected $required_plugins = array();
public function __construct () {
foreach($this->required_plugins as $plugin)
$this->load($plugin);
}
public function __destruct () {
}
}
class plugin_foo extends plugin {
protected $required_plugins = array('bar');
}
class plugin_bar extends plugin {
protected $required_plugins = array('abc');
}
class plugin_abc extends plugin {
protected $required_plugins = array('foo');
}
$app = new app();
$app->load('foo');
Wenn versucht wird das Plugin "foo" zu laden, wird festgestellt das selbiges das Plugin "bar" benötigt. Es wird also versucht zuerst "bar" zu initialisieren. Dabei wird widerum festgestellt das dafür "abc" benötigt wird. Beim Versuch dieses zu initialisieren, wird abermals festgestellt das dieses auch von "foo" abhängig (was wir unsprünglich laden wollten) ist, dies aber wegen den Abhängigkeiten noch nicht initialisiert werden konnte -> wir drehen uns im Kreis -> Memory Limit erreicht.
Ist ja gut das mir das soweit schon mal bewusst ist, aber mir fehlt hier eine clevere Idee das Problem zu lösen. Ich hoffe mit kann jemand auf die Spünge helfen.
Gruss Reiner