如果您想按照示例进行操作,请确保在您的系统上安装 Composer。使用 Composer 自动加载时,您可以选择不同的方法。
具体来说,Composer 提供了四种不同的自动加载文件的方法:
根据 Composer 官方文档,PSR-4 是推荐的自动加载方式,我们将在下一节详细介绍。在本节中,我们将简要讨论其他三个选项。
在我们继续之前,让我们快速浏览一下当您想使用 Composer 自动加载时需要执行的步骤。
composer dump-autoload
命令以生成 Composer 将用于自动加载的必要文件。require 'vendor/autoload.php'
在文件顶部包含要使用自动加载的语句。文件自动加载的工作方式类似于允许您加载整个源文件的include
或require
语句。files
每次应用程序运行时,都会加载该指令引用的所有源文件。这对于加载不使用类的源文件很有用。
要使用文件自动加载,请files
在composer.json文件的指令中提供文件列表,如以下代码段所示。
{
"autoload": {
"files": ["lib/Foo.php", "lib/Bar.php"]
}
}
我们可以在files
要使用 Composer 自动加载的指令中提供文件列表。使用上述内容在项目根目录中创建composer.json文件后,您只需运行该composer dump-autoload
命令即可创建必要的自动加载器文件。这些将在供应商目录下创建。最后,您需要require 'vendor/autoload.php'
在文件顶部包含要使用 Composer 自动加载文件的语句,如以下代码段所示。
<?php require 'vendor/autoload.php'; // code which uses things declared in the "lib/Foo.php" or "lib/Bar.php" file ?>
该require 'vendor/autoload.php'
语句确保动态加载必要的文件。
自动加载:classmap指令
Classmap 自动加载是文件自动加载的改进版本。您只需要提供一个目录列表,Composer 将扫描这些目录中的所有文件。对于每个文件,Composer 将列出该文件中包含的类,并且每当需要这些类中的一个时,Composer 将自动加载相应的文件。
让我们快速修改composer.json文件来演示类映射自动加载器。
{ "autoload": { "classmap": ["lib"] } }
运行该
composer dump-autoload
命令,Composer 将读取lib目录中的文件以创建可自动加载的类映射。自动加载:PRS-0
PSR-0 是 PHP-FIG 组推荐的自动加载标准。在 PSR-0 标准中,您必须使用命名空间来定义您的库。完全限定的类名必须反映
\<Vendor Name>\(<Namespace>\)*<Class Name>
结构。此外,您的类必须保存在遵循与命名空间相同的目录结构的文件中。让我们看看下面的
composer.json
文件。{ "autoload": { "psr-0": { "Tutsplus\\Library": "src" } } }
在 PSR-0 自动加载中,您需要将命名空间映射到目录。在上面的例子中,我们告诉 Composer 任何以
Tutsplus\Library
命名空间开头的东西都应该在src\Tutsplus\Library目录中可用。例如,如果要
Foo
在src\Tutsplus\Library目录中定义类,则需要创建src\Tutsplus\Library\Foo.php 文件,如以下代码段所示:<?php namespace Tutsplus\Library; class Foo { //... } ?>
这个类是在Tutsplus\Library
命名空间中定义的。此外,文件名对应于类名。让我们快速看看如何自动加载Foo
类。<?php require 'vendor/autoload.php'; $objFoo = new Tutsplus\Library\Foo(); ?>
Composer 将从src\Tutsplus\Library目录自动加载
Foo
类。以上是对 Composer 中文件、类映射和 PSR-0 自动加载的简要说明。在下一节中,我们将看到 PSR-4 自动加载是如何工作的。
自动加载:PRS-4
在上一节中,我们讨论了 PSR-0 自动加载的工作原理。PSR-4 类似于 PSR-0 自动加载,因为您需要使用名称空间,但您不需要使用名称空间模仿目录结构。
在 PSR-0 自动加载中,您必须将命名空间映射到目录结构。正如我们在上一节中讨论的,如果您想自动加载
Tutsplus\Library\Foo
类,它必须位于src\Tutsplus\Library\Foo.php。在 PSR-4 自动加载中,您可以缩短目录结构,与 PSR-0 自动加载相比,这会导致目录结构更加简单。我们将修改上面的示例 – 看看您是否能发现差异。
这是使用 PSR-4 自动加载的 composer.json文件的外观。
{ "autoload": { "psr-4": { "Tutsplus\\Library\\": "src" } } }
需要注意的是,我们在命名空间的末尾添加了尾随反斜杠。上面的映射告诉 Composer 任何以
Tutsplus\Library
命名空间开头的东西都应该在src目录中可用。所以你不需要创建Tutsplus和Library目录。例如,如果您请求Tutsplus\Library\Foo
该类,Composer 将尝试加载src\Foo.php文件。重要的是要了解
Foo
该类仍然定义在Tutsplus\Library
命名空间下;只是您不需要创建模仿命名空间的目录。该SRC \ Foo.php文件的内容将是相同的那些的 SRC \ Tutsplus \图书馆\ Foo.php的文件 一节。如您所见,PSR-4 导致目录结构更加简单,因为您可以省略创建嵌套目录,同时仍然使用完整的命名空间。
PSR-4 是推荐的自动加载方式,它被 PHP 社区广泛接受。如果您还没有这样做,您应该开始在您的应用程序中使用它!
欢迎光临 PHP开发笔记 (http://phpvi.com/) | Powered by Discuz! 6.1.0 |