【问题标题】:build a plugin system with php用php搭建插件系统
【发布时间】:2008-10-20 06:41:55
【问题描述】:

我正在开发一个供我自己使用的自定义 CMS,并且正在考虑实现一个插件系统,以便我可以更轻松地扩展代码。不过,我在概念化架构和布局时遇到了麻烦。

我知道我可以通过一些实现类似功能的开源程序,但这实际上只是学术性的,所以我真的不想花太多时间挖掘外国代码。

有没有人对如何进行有任何好主意?如果有人可以概述一些更流行的程序是如何做到的,那就完美了。

【问题讨论】:

  • 您能就这个问题提供您自己的见解吗?您问这个问题已经有一段时间了,我很想知道您从编写自定义 php CMS 的经验中学到的最重要的方面是什么。
  • @AdrianMoisa 虽然我不是 OP,但我认为值得评论的是,编写 CMS 是一件非常简单直接的事情 - 如果你只是尝试一步一步地去做。阅读这方面的书籍或教程可能比帮助更令人困惑。 (然而,阅读像 php.net 这样的优秀文档总是有帮助的)。我学到的另一件事是:使用 OOP(可能使用 Composer 自动加载器)。课程就像你必须对所有东西进行分类的盒子。同样,阅读 OOP 会使您的大脑受损,因此请以自然的方式进行,而不是像那些 Java 怪胎所说的那样。没什么可补充的:简单的 PDO、会话、JS 编辑器……

标签: php plugins


【解决方案1】:
  1. 定义您希望插件插入的功能(即,它们将做什么以及做什么)
  2. 定义适合插件的类层次结构,例如,所有文章修饰插件都应继承自 ArticleMangler
  3. 为插件定义物理位置,例如 /plugins
  4. 导入该位置的所有插件
  5. 使用DecoratorObserver 模式注入插件的行为或通知插件事件发生。 Strategy 在某些情况下也可能适用。

如果你不小心的话,PHP 使这变得相当容易,但可能会造成混乱。我喜欢 Observer 方法,其中插件将自己注册到插件管理器,插件管理器会通知他们发生的事情并等待他们的操作发生。

如果您不信任插件,那么您必须添加控件来控制您将允许任何插件注册的事件。

【讨论】: