ich die dynamischen Laden von Plugins auf folgende Weise umgesetzt:Unload dynamische Klasse in PHP
function processPlugin($plgFile, $db) {
require_once($plgFile);
$plgin = new PlginImpl();
$plgin->setDb($db);
$ret = $plgin->process();
return $ret;
}
Jedes Plugin definiert eine Klasse PlginImpl
benannt, der gut arbeitet. Es sollte jedoch möglich sein, weitere innerhalb des Rückgabewerts von process()
angegebene Plugins aufzurufen. Das würde die gleiche Methode, die oben angegeben nennen, doch irgendwie:
Fatal error: Cannot redeclare class PlginImpl in ..
Bitte beachten Sie, dass jedes Plugin eine Klasse ist, d.h .:
class PlginImpl extends Plugin implements PluginInterface
Plugin
bieten einige nützliche Funktionen während PluginInterface
definiert das heißt process()
.
Ich nehme an, dass die Tatsache, dass alle Plugins PlginImpl genannt werden, das Problem verursacht, daher meine Frage: Gibt es eine Möglichkeit, eine Klasse (PlginImpl
) nach dem Laden mit require_once
zu entladen? Oder gibt es einen ganz anderen Ansatz, dem ich folgen sollte?
EDIT Ich habe versucht, ohne die folgenden Dinge Erfolg:
- ungesetzt
$plgin
nachprocess()
__destruct()
Aufruf - es ist nicht weder innerhalbprocessPlugin()
funktioniert noch innerhalb derprocess
Methode
Vielen, vielen Dank!
Ich habe versucht mit Unset wie oben beschrieben, aber es entlädt nur die Instanz von PlginImpl, aber die Definition bleibt im Speicher (der zweite Lauf fehlschlägt). Dekonstruktor funktioniert auch nicht. – MrG