的StackOverflow!
我正在寻找一种方法来使用PHP创建类似插件(我不知道如何调用它)的Web应用程序。有了这个,我的意思是我想建立一个系统,用户可以通过浏览器添加/删除插件(扩展,如果你喜欢)(而不是通过添加一些代码来配置)。在我看来,WordPress就是一个很好的例子。最终用户可以简单地安装任何类型的插件,并且几乎不做任何事情,他们按预期工作,并且经常有很多设置需要更改,等等。
另外,我希望尽可能使它变得可用。有了这个,我的意思是插件可以使用其他插件的一部分,因此重写的代码更少。例如,有用于授权/身份验证的插件以及与用户相关的所有其他内容。然后,有一个用于博客的插件。博客,当然,之前需要提到,对吗?所以它只是使用前面提到的插件来工作。我知道会有很多依赖等等......但它只是正常的。 :)
我的问题是......我能用什么技术来完成它?这种系统的优点和缺点是什么?我认为它会慢一些,不适合Facebook这样的大型网站(好吧,那太大了),但对于简单的博客,投资组合,不管它会不会很好!
我听说过事件驱动编程(或基于事件的编程),我读过有关它的文章on Wikipedia,但仍然......我很困惑,甚至更不确定我正在寻找的东西。
感谢您阅读本文。如果可能的话,给我一些答案。 :d
答案 0 :(得分:6)
需要考虑多个问题。正如您所指出的,插件系统依赖于在应用程序中注册扩展,而扩展本身需要一种方法来挂钩主应用程序。
对于它的所有缺点,Wordpress有一个非常可行的方法。它uses "hooks"用于连接插件。这基本上是一个回调系统,或多或少可以构成“事件驱动”。从根本上说,主要应用程序的功能如下:
foreach ($callback["need_to_render_sidebar"] as $fn) {
$fn();
}
但是你可以通过传递额外的参数,返回数据,更重要的是使其更灵活:使用对象而不是程序回调来获得更复杂的功能。 (我想进行混合和匹配。没有一种方法适合所有应用程序或扩展。)
同样,插件系统通常会使扩展程序本身回调主应用程序,将数据输入其中或修改设置。
您需要考虑插件系统的第二部分是如何使其易于管理。基本上每个WebCMS / DMS都有自己的方法。许多人使用zip文件手动提取或模块目录。对于初学者来说,类似WP的元数据增强脚本文件方法是最合适的。我制作了一个类似的系统,它可以独立于WP使用,虽然它很粗糙:http://milki.include-once.org/genericplugins/(很好的部分实际上是设置的可管理性。)
答案 1 :(得分:2)
只是一个简单的概念。
您可以将扩展用作PHP类,并将它们存储在一个(或多个)目录(-ies)中的单独文件中。您必须通过浏览扩展文件并创建这些类的对象来初始化主应用程序中的扩展。
添加新扩展名将包括向目录添加新的类文件。您还可以在扩展中添加启用/禁用功能或在主应用程序中管理。