在PHP中卸载动态类

前端之家收集整理的这篇文章主要介绍了在PHP中卸载动态类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我通过以下方式实现了动态加载插件
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
}

猜你在找的PHP相关文章