我开始用我的一个朋友在php中编写应用程序,并且想知道,如果您对如何在我们的应用程序中实现模块支持有任何建议。
或者有没有办法如何通过php应用程序自动加载用php编写的模块?或者我应该只依靠__autoload函数?
我们不需要可通过Web界面安装的插件,我们只需要一些聪明的方法将项目的网页关联到某些类(它们将呈现页面),因此index.php可以调用正确的类并检索它生成的子页面。
至少现在我们没有使用任何类型的框架。
答案 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
它允许您具有以下原则: