4

堆栈溢出!

我正在寻找一种使用 PHP 制作类似插件(我不知道如何调用它)的 Web 应用程序的方法。我的意思是我想创建一个系统,用户可以通过浏览器添加/删除插件(扩展,如果你喜欢的话)(而不是通过向配置添加一些代码)。在我看来,WordPress 就是一个很好的例子。最终用户可以简单地安装任何类型的插件,并且几乎什么都不做,它们可以按预期工作,而且经常有很多设置需要更改等等。

另外,我很想让它尽可能可用。我的意思是插件可以使用其他插件的一部分,因此重写的代码更少。例如,有用于授权/身份验证的插件以及与用户相关的所有其他内容。然后,有用于博客的插件。博客,当然,需要前面提到过,对吧?所以它只是使用前面提到的插件来工作。我知道会有很多依赖等等......但这只是正常的。:)

我的问题是......我可以用什么技术来完成它?这种系统的优点和缺点是什么?我认为它会慢一些,并且不适合像 Facebook 这样的非常大的网站(好吧,这太大了),但对于简单的博客、投资组合,无论如何都可以!

我听说过事件驱动编程(或基于事件的编程),并且我在 Wikipedia 上阅读过有关它的文章,但仍然......我很困惑,甚至不确定这是我的事情寻找。

感谢您阅读本文。给我一些答案,如果可能的话。:D

4

2 回答 2

6

有多个问题需要考虑。正如您所指出的,插件系统依赖于向应用程序注册扩展,而扩展本身需要一种连接到主应用程序的方法。

对于所有的缺点,Wordpress 有一个非常可行的方法来解决这个问题。它使用“钩子”来连接插件。这基本上是一个回调系统,或多或少也可以等同于“事件驱动”。从根本上说,主应用程序执行以下操作:

foreach ($callback["need_to_render_sidebar"] as $fn) {
    $fn();
}

但是您可以通过传递额外的参数、返回数据以及更重要的是:使用对象而不是过程回调来实现更复杂的功能,从而使其更加灵活。(我建议混合搭配。没有一种方法适合所有应用程序或扩展。)

同样,插件系统通常使扩展本身能够回调主应用程序、向其中提供数据或修改设置。

对于插件系统,您需要考虑的第二部分是如何使其易于管理。基本上每个 WebCMS/DMS 都有自己的方法。许多使用 zip 文件手动解压,或模块目录。对于初学者来说,类似 WP 的元数据增强脚本文件方法是最合适的。我做了一个类似的系统,可以独立于 WP 使用,虽然它很粗糙: http: //milki.include-once.org/genericplugins/(好的部分实际上是设置的可管理性。)

于 2011-08-09T11:37:22.110 回答
2

只是一个简单的概念。

您可以将扩展用作 PHP 类,并将它们存储在一个(或多个)目录(-ies)中的单独文件中。您必须通过浏览扩展文件并创建这些类的对象来初始化主应用程序中的扩展。

添加新扩展将包括将新类文件添加到目录中。您还可以在扩展中添加启用/禁用功能或在主应用程序中管理。

于 2011-08-09T11:37:32.767 回答