如何使用PHP制作类似插件的Web应用程序?

4

StackOverflow!

我正在寻找一种使用PHP制作插件式(我不知道该如何称呼它)Web应用程序的方法。我的意思是,我想创建一个系统,用户可以通过浏览器添加/删除插件(如果您喜欢,可以称之为扩展)。在我看来,WordPress就是一个很好的例子。最终用户可以轻松安装各种插件,并且几乎不需要做任何事情即可按预期工作,并且通常有许多设置可以更改等。

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

我的问题是...我可以用什么技术来实现它?这种系统的优缺点是什么?我认为它会慢一些,并且不适合像Facebook这样的非常庞大的网站(好吧,那只是太庞大了),但对于简单的博客、作品集等,它将非常适合!

我听说过事件驱动编程(或基于事件的编程),并阅读了一篇关于它的文章(维基百科),但仍然...我非常困惑,甚至更不确定它是否就是我要寻找的东西。

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

2个回答

6

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

尽管存在缺陷,但WordPress在这方面有一个相当可行的方法。它使用“挂钩”来与插件接口。这基本上是一种回调系统,可以更多或更少地等同于“事件驱动”。从根本上讲,主应用程序会执行以下操作:

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

但是您可以通过传递额外的参数、返回数据以及更重要的是:对于更复杂的功能,使用对象而不是过程式回调来使其更加灵活。 (我建议混合使用。没有一种方法适用于所有应用程序或扩展。)
同样,插件系统通常使扩展本身能够回调主应用程序,向其提供数据或修改设置。
您需要考虑插件系统的第二个部分是如何使其可管理。基本上每个WebCMS / DMS都有自己的方法。许多人使用zip文件进行手动提取,或者模块目录。对于初学者而言,类似WP的元数据增强脚本文件的方法最为合适。我制作了一个类似的系统,可以独立于WP使用,尽管它还比较粗糙:http://milki.include-once.org/genericplugins/(美妙之处实际上在于设置的可管理性。)

2

这是一个简单的概念。

你可以将扩展作为PHP类使用,并将它们存储在一个(或多个)目录中的不同文件中。你需要通过查看扩展文件并创建这些类的对象来初始化扩展到主应用程序中。

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


1
除此之外,您还可以使用对象接口来标记作为插件接口的类。 - memical

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接