implementé la carga dinámica de los plugins de la siguiente manera:de descarga dinámica de clases en PHP
function processPlugin($plgFile, $db) {
require_once($plgFile);
$plgin = new PlginImpl();
$plgin->setDb($db);
$ret = $plgin->process();
return $ret;
}
Cada plugin define una clase denominada PlginImpl
, que trabaja muy bien. Pero debería ser posible llamar a otros complementos especificados dentro del valor de retorno de process()
. Esto supondría el mismo método especificado anteriormente, pero falla con:
Fatal error: Cannot redeclare class PlginImpl in ..
Tenga en cuenta que cada plugin es una clase, es decir .:
class PlginImpl extends Plugin implements PluginInterface
Plugin
ofrecer algunas funciones útiles mientras PluginInterface
define decir process()
.
Supongo que el hecho de que todos los complementos se llamen PlginImpl causa el problema, de ahí mi pregunta: ¿hay alguna forma de descargar una clase (PlginImpl
) después de cargarla con require_once
? ¿O hay un enfoque completamente diferente que debería seguir?
EDITAR he intentado sin éxito las siguientes cosas:
- desarmar
$plgin
despuésprocess()
- llamando
__destruct()
- no funciona ni dentro niprocessPlugin()
dentro del métodoprocess
¡Muchas muchas gracias!
Intenté usar unset como se describe arriba, pero solo descarga la instancia de PlginImpl, pero la definición permanece en la memoria (los failes de la segunda ejecución). Deconstructor tampoco funciona. – MrG