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

daG*_*vis 4 php plugins frameworks event-based-programming

堆栈溢出!

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

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

我的问题是......我能用什么技术来完成它?这种系统的优点和缺点是什么?我认为它会慢一些,不适合像Facebook这样的大型网站(好吧,那太大了),但对于简单的博客,投资组合,不管它会不会很好!

我听说过事件驱动编程(或基于事件的编程),我在维基百科上读过关于它的文章,但仍然......我很困惑,甚至更多,不确定它是我的东西寻找.

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

mar*_*rio 6

有许多问题需要考虑.正如您所指出的,插件系统依赖于向应用程序注册扩展,并且扩展本身需要一种方法来挂钩主应用程序.

对于它的所有缺点,Wordpress有一个非常可行的方法.它使用"钩子"来连接插件.这基本上是一个回调系统,或多或少可以构成"事件驱动".从根本上说,主要的应用程序是这样的:

foreach ($callback["need_to_render_sidebar"] as $fn) {
    $fn();
}
Run Code Online (Sandbox Code Playgroud)

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

同样,插件系统通常使扩展本身能够回调主应用程序,将数据输入其中或修改设置.

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