首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中“Include”的用法

PHP中“Include”的用法
EN

Stack Overflow用户
提问于 2014-06-20 07:57:42
回答 1查看 67关注 0票数 0

关于我问题的简短背景:

我将启动一个新项目,它将具有各种功能。我需要组织基于模块的功能。例如,在member.php中,成员相关函数进入成员类,在gallery.php中,与库相关的函数进入库类。这些文件将在文件夹root/modules/中。该文件夹下将有许多文件表示每个模块。

我将使用htaccess将任何请求重定向到index.php,该文件将完成显示页面所需的一切工作。

因此,基于上述(重定向和使用单个文件处理所有请求),我将使用PHP函数来包含所有模块。

我不确定是否包括所有模块都会引起任何问题。

需要关于:的建议

  • 包括所有模块是否会导致与速度等有关的问题
  • 是否有任何建议/备选方案包括模块
EN

回答 1

Stack Overflow用户

发布于 2014-06-20 08:28:32

使用SPL-Autoloader

有一个spl_autoload_register()函数,它允许您指定一个自定义自动加载函数。从PHP5.3.0开始,您甚至可以指定一个闭包。

使用自动加载程序的最酷之处是,它将按需加载所请求的文件,因此您将没有开销,包括请求中的所有文件。

这意味着,当一个类由于找不到而无法实例化时,它不会抛出一个错误,它将触发您的autoload函数并传递请求的类。当然,您的自动加载程序需要加载正确的文件。

样本

/autoloadsample.php

代码语言:javascript
复制
<?php

spl_autoload_register(function($class){

    include 'classes/' . $class . '.php';

});

$user = new User();

$user->test();

/classes/User.php

代码语言:javascript
复制
<?php

class User {

    public function test()
    {
        echo "Hello World";
    }

}

如您所见,我们没有手动包含/classes/User.php文件。不过,这里一切都会好起来的。

使用作曲家

尽管solution将适用于小型项目,但并不一定是最好的解决方案。如果您有一个复杂的项目结构,您将需要关心您想要加载的文件在整个项目中的位置。

幸运的是我们找到了作曲家。它是一个整洁的PHP包/依赖关系管理器,它还为您提供了一个自动加载程序。

一旦您安装了composer,就很容易引导自动加载。

在项目根目录中创建一个composer.json

代码语言:javascript
复制
{
    "autoload": {
        "classmap": [
            "ProjectDomain"
        ]
    }
}

只是个普通的老json文件。类映射数组接受要自动加载的目录字符串。

然后使用命令行切换到项目工作目录和

composer installcomposer.phar install (如果尚未全局安装composer )

Composer将为您创建一个vendor/目录,该目录通常包含您在composer.json中所需的依赖项,但是由于我们不需要任何依赖项,所以我们将跳过该目录。

在该目录中,您将找到一个autoload.php文件,您现在只需从前端控制器请求该文件即可。

index.php

代码语言:javascript
复制
<?php

include 'vendor/autoload.php';

$user = new User();

$user->test();

Composer还支持PSR-自动加载。这样您就可以使用命名空间类,而composer将处理所有自动加载。例如,它可能看起来是这样的。

composer.json

代码语言:javascript
复制
{
    "autoload": {
        "psr-4": {
            "Project\\": "ProjectDomain"
        }
    }
}

ProjectDomain/User.php

代码语言:javascript
复制
<?php namespace Project;

class User {

    public function test()
    {
        echo "Hello World!";
    }

}

index.php

代码语言:javascript
复制
<?php

include 'vendor/autoload.php';

$user = new Project\User();

$user->test();

确保无论何时对composer dump-autoload文件进行与自动加载相关的更改,都要运行composer.json。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24322577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档