加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中卸载动态类

发布时间:2020-12-13 22:34:37 所属栏目:PHP教程 来源:网络整理
导读:我通过以下方式实现了动态加载插件: function processPlugin( $plgFile,$db ) { require_once( $plgFile ); $plgin = new PlginImpl(); $plgin-setDb($db); $ret = $plgin-process(); return $ret;} 每个插件定义一个名为PlginImpl的类,它可以正常工作.但是
我通过以下方式实现了动态加载插件:
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方法中有效

非常感谢!

由于您在加载类后无法卸载它,因此您唯一的选择是重命名每个插件.

PluginX,PluginY等,但它应该无关紧要,因为您可以强制它们使用插件界面,如您所示.

要加载一个特定的插件,你可以简单地使用solomongaby建议的东西,但不是文件名,而是传递插件的名称..这样的东西:

function loadPlugin($pluginName) {
    require_once $pluginName . '.php';

    $plugin = new $pluginName;
    //do whatever with $plugin
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读