php 自动加载类-如何使用 Composer 在 PHP 中手动加载类

手动加载:classmap指令

Classmap手动加载是文件手动加载的改进版本。 您只需要提供一个目录列表,Composer 就会扫描该目录中的所有文件。 对于每个文件,Composer 都会枚举该文件中包含的类,每当需要其中一个类时,Composer 就会手动加载相应的文件。

让我们快速更改composer.json 文件以演示类映射手动加载器。

{
    "autoload": {
        "classmap": ["lib"]
    }
}

运行composerdump-autoload命令,Composer将读取lib目录中的文件以创建可手动加载的类映射。

手动装载:PSR-0

PSR-0是PHP-FIG组推荐的手动加载标准。 在 PSR-0 标准中,您必须使用命名空间来定义您的库。 完全限定的类名必须反映 \()* 结构。 据了解,您的类必须保存在遵循与名称空间相同的目录结构的文件中。

我们来看看下面的composer.json文件。

{
    "autoload": {
        "psr-0": {
            "Tutsplus\Library": "src"
        }
    }
}

在PSR-0手动加载中php 自动加载类,需要将命名空间映射到目录。 在前面的示例中,我们告诉 Composer 任何以 TutsplusLibrary 命名空间开头的内容都应该在 srcTutsplusLibrary 目录中可用。

php延迟加载_php 自动加载类_找不到或无法加载主类怎么解决

例如,如果您希望 Foo 在 srcTutsplusLibrary 目录下定义一个类,则需要创建 srcTutsplusLibraryFoo.php 文件,如以下代码片段所示:

正如您所看到的,此类是在 TutsplusLibrary 命名空间中定义的。 据悉,文件名与类名相对应。 让我们快速了解一下如何手动加载 Foo 类。

php延迟加载_php 自动加载类_找不到或无法加载主类怎么解决

Composer 将从 srcTutsplusLibrary 目录手动加载 Foo 类。

以上是Composer中文件、类映射和PSR-0手动加载的简要说明。 在下一节中,我们将了解 PSR-4 手动加载的工作原理。

如何使用 Composer 手动加载 PSR-4

在上一节中,我们讨论了 PSR-0 手动加载的工作原理。 PSR-4 与 PSR-0 手动加载类似,需要使用命名空间,但不需要使用命名空间来模拟目录结构。

php延迟加载_php 自动加载类_找不到或无法加载主类怎么解决

在PSR-0手动加载中,您必须将命名空间映射到目录结构。 正如我们在上一节中讨论的,如果您想手动加载 TutsplusLibraryFoo 类,它必须位于 srcTutsplusLibraryFoo.php 中。 在PSR-4手动加载中,您可以缩短目录结构,从而与PSR-0手动加载相比,目录结构更简单。

我们将更改里面的示例 - 看看您是否能注意到其中的差异。

这是使用 PSR-4 手动加载时composer.json 文件的样子。

{
    "autoload": {
        "psr-4": {
            "Tutsplus\Library\": "src"
        }
    }
}

找不到或无法加载主类怎么解决_php延迟加载_php 自动加载类

请注意,我们在命名空间末尾添加了一个尾部反斜杠。 内部的映射告诉 Composer 任何以 TutsplusLibrary 命名空间开头的内容都应该在 src 目录中可用。 所以你不需要创建Tutsplus和Library目录。 例如,如果您请求 TutsplusLibraryFoo 类,Composer 将尝试加载 srcFoo.php 文件。

重要的是要理解 Foo 类仍然定义在 TutsplusLibrary 命名空间下; 只是您不需要创建模仿名称空间的目录。 srcFoo.php 文件的内容将与 srcTutsplusLibraryFoo.php 文件部分中的内容相同。

正如您所看到的,PSR-4 导致目录结构更加简单,因为您可以省略创建嵌套目录,同时仍然使用完整的命名空间。

PSR-4是推荐的手动加载形式,被PHP社区广泛接受。 如果您还没有这样做,您应该开始在您的应用程序中使用它!

推理

明天php 自动加载类,我们讨论 PHP 中的手动加载。 从介绍各种Composer手动加载技术开始,我们在文章后半部分详细讨论了PSR-0和PSR-4手动加载标准。