关于我问题的简短背景:
我将启动一个新项目,它将具有各种功能。我需要组织基于模块的功能。例如,在member.php中,成员相关函数进入成员类,在gallery.php中,与库相关的函数进入库类。这些文件将在文件夹root/modules/中。该文件夹下将有许多文件表示每个模块。
我将使用htaccess将任何请求重定向到index.php,该文件将完成显示页面所需的一切工作。
因此,基于上述(重定向和使用单个文件处理所有请求),我将使用PHP函数来包含所有模块。
我不确定是否包括所有模块都会引起任何问题。
需要关于:的建议
发布于 2014-06-20 08:28:32
使用SPL-Autoloader
有一个spl_autoload_register()函数,它允许您指定一个自定义自动加载函数。从PHP5.3.0开始,您甚至可以指定一个闭包。
使用自动加载程序的最酷之处是,它将按需加载所请求的文件,因此您将没有开销,包括请求中的所有文件。
这意味着,当一个类由于找不到而无法实例化时,它不会抛出一个错误,它将触发您的autoload函数并传递请求的类。当然,您的自动加载程序需要加载正确的文件。
样本
/autoloadsample.php
<?php
spl_autoload_register(function($class){
include 'classes/' . $class . '.php';
});
$user = new User();
$user->test();/classes/User.php
<?php
class User {
public function test()
{
echo "Hello World";
}
}如您所见,我们没有手动包含/classes/User.php文件。不过,这里一切都会好起来的。
使用作曲家
尽管solution将适用于小型项目,但并不一定是最好的解决方案。如果您有一个复杂的项目结构,您将需要关心您想要加载的文件在整个项目中的位置。
幸运的是我们找到了作曲家。它是一个整洁的PHP包/依赖关系管理器,它还为您提供了一个自动加载程序。
一旦您安装了composer,就很容易引导自动加载。
在项目根目录中创建一个composer.json。
{
"autoload": {
"classmap": [
"ProjectDomain"
]
}
}只是个普通的老json文件。类映射数组接受要自动加载的目录字符串。
然后使用命令行切换到项目工作目录和
composer install或composer.phar install (如果尚未全局安装composer )
Composer将为您创建一个vendor/目录,该目录通常包含您在composer.json中所需的依赖项,但是由于我们不需要任何依赖项,所以我们将跳过该目录。
在该目录中,您将找到一个autoload.php文件,您现在只需从前端控制器请求该文件即可。
index.php
<?php
include 'vendor/autoload.php';
$user = new User();
$user->test();Composer还支持PSR-自动加载。这样您就可以使用命名空间类,而composer将处理所有自动加载。例如,它可能看起来是这样的。
composer.json
{
"autoload": {
"psr-4": {
"Project\\": "ProjectDomain"
}
}
}ProjectDomain/User.php
<?php namespace Project;
class User {
public function test()
{
echo "Hello World!";
}
}index.php
<?php
include 'vendor/autoload.php';
$user = new Project\User();
$user->test();确保无论何时对composer dump-autoload文件进行与自动加载相关的更改,都要运行composer.json。
https://stackoverflow.com/questions/24322577
复制相似问题