我通过以下方式实现了动态加载插件:
function processPlugin( $plgFile,$db ) { require_once( $plgFile ); $plgin = new PlginImpl(); $plgin->setDb($db); $ret = $plgin->process(); return $ret; }
每个插件定义一个名为PlginImpl的类,它可以正常工作.但是应该可以在process()的返回值内调用指定的其他插件.这会调用上面指定的相同方法,但失败的是:
Fatal error: Cannot redeclare class PlginImpl in ..
请注意,每个插件都是一个类,即:
class PlginImpl extends Plugin implements PluginInterface
Plugin提供了一些有用的功能,而PluginInterface定义了ie().
我假设所有插件都名为PlginImpl的事实导致问题,因此我的问题是:有没有办法在用require_once加载它后卸载一个类(PlginImpl)?或者我应该采用完全不同的方法?
编辑
我试过没有成功完成以下事情:
>进程后取消设置$plgin()
>调用__destruct() – 它既不在processPlugin()中也不在process方法中有效
非常感谢!