0

我正在寻找一个像程序一样的插件管理器,它启动一个循环,在“插件”文件夹中搜索 .php 文件。我需要它以某种方式运行main()在每个文件中调用的函数,然后该函数将运行其他函数。我怎么能在没有其他main()功能冲突的情况下做到这一点,还有更好的选择吗?

4

1 回答 1

1

如果你想使用函数,那么你可以命名它们。但是对于像这样的 id 使用类。例如,每个插件可能有一个PluginConfiguration类,它可以是命名空间的,也可以是PluginName\PluginConfiguration伪造的PluginName_PluginConfiguration

然后,您可以直接实例化这些类并调用任何内容,例如:

class MyCool_Plugin implements PluginInterface {

  // note the interface wouldnt be absolutely necessary, 
  // but making an interface or abstract class for this would be a good idea
  // that way you can enforce a contractual API on the configuration classes

  public function __construct() {
     // do whatever here
  }

  public function main() {
     // do whatever here
  }
}

更新:

顺便说一句,“PluginInterface”包括什么?

一个接口定义了一个类必须实现的所有方法(函数)。您可以使用它在该接口的任何类上强制执行最低 API implements。根据您的描述,这将是一种方法,main尽管在开发过程中您可能会发现您需要/想要添加更多。

Interface PluginInterface {

   public function main();

}

您还可以使用类型提示来强制执行特定的方法签名。例如,假设您总是想将Application加载插件的实例注入插件本身,以便它可以注册内容或设置其他内容。在这种情况下,您可能会这样做:

Interface PluginInterface {

   public function main(Application $app);

}
于 2012-09-22T00:16:36.900 回答