使用模块支持编写PHP应用程序有哪些好方法?

时间:2010-05-16 11:35:44

标签: php module

我开始用我的一个朋友在php中编写应用程序,并且想知道,如果您对如何在我们的应用程序中实现模块支持有任何建议。

或者有没有办法如何通过php应用程序自动加载用php编写的模块?或者我应该只依靠__autoload函数?

我们不需要可通过Web界面安装的插件,我们只需要一些聪明的方法将项目的网页关联到某些类(它们将呈现页面),因此index.php可以调用正确的类并检索它生成的子页面。

至少现在我们没有使用任何类型的框架。

4 个答案:

答案 0 :(得分:1)

听起来您正在寻找一种方法来组织每个页面需要执行的不同任务。在这种情况下,请查看MVC pattern。它提供了一种简单的方法来分离您的数据访问(模型)以及如何呈现/呈现信息(视图)。

您可以轻松地将页面映射到函数。如果将信息存储在映射值数组中,然后使用函数将请求的URL与数组中的每个URL进行比较。这样的数组可能如下所示:

$urls = array(
    '/' => 'index',
    '/aboutus/' => 'aboutUs',
);

有几篇文章讨论了如何在几个小时内在PHP中实现它。 This article是一个非常简单的指南。我不是他们使用注册表模式的粉丝,但阅读应该为您提供有关如何自己实现它的足够信息。

答案 1 :(得分:1)

重新评论:在这种情况下,自动加载与严格的文件命名完全相同。

您可以定义一个特定的命名空间(不是以新的PHP 5.3 namespace方式,只是在名称的公共前缀的意义上),例如模块类名称Module_*

然后,您可以使用只包含一个类定义的类文件在目录中组织模块,例如:

/modules/Mail/index.php   // defines class Module_Mail
/modules/Database/index.php   // defines class Module_Database
/modules/Image/index.php   // defines class Module_Image

然后,只要请求Module_*课程,您的自动加载器功能就会出现:

$Database = new Module_Database("localhost", .....);

包含正确目录中的正确文件。

这就是例如Zend框架做到了,并且做得非常好。

考虑选择比Module_更具体的命名空间,以确保与其他脚本和应用程序的互操作性,如果这是将来的选项。

略有关联:In a PHP project, how do you organize and access your helper objects?

答案 2 :(得分:1)

关于自动加载,您还可以使用spl_autoload_register来定义多个(多个)自动加载功能,因此每个模块都可以设置自己的自动加载实现。

答案 3 :(得分:0)

这里所需要的只是一个MVC架构,其中一个Controller类与每个“模块”相关联。

如果您不反对使用框架,请转到Zend MVC

它允许您具有以下原则: