简介
对于文件的自动加载,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,就会得到自动加载的支持。
require 'vendor/autoload.php';
这使得你可以很容易的使用第三方代码。
例如,如果你的项目依赖 monolog,你通过 composer 安装了 monolog 之后,就可以直接在其他文件中使用 monolog 类库,它们都会被自动加载。
自动加载的类型
composer 支持多种 autoloader ,它们都是在 composer.json 文件的 autoload 中进行配置。
如果你想要在项目中添加自己的 autoloader,请在项目目录的 composer.json 文件中进行配置。
composer 支持的 autoloader 的类型主要有 psr-4、psr-0、classmap 和 files 。
注意:每次添加的新的 autoloader 时,需要执行 composer dumpautoload 命令,来让 autoloader 立即生效。
psr-4
psr-4 类型的 autoloader 必须遵循 psr-4 自动加载规范。
"autoload": {
"psr-4": {
"App\\": "app/",
"Acme\\": "src/"
}
},
说明: "App\\": "app/"
是项目中本来就有的,"Acme\\": "src/"
是我们自己添加的。
命名空间的声明应该以 \\
结束,以确保 autoloader 能够准确映射到实际的路径。
Composer 将注册一个 PSR-4 autoloader 到 Acme 命名空间,该命名空间所映射的目录就是项目根目录中的 src 目录。(src 文件夹 与 vendor 文件夹同级)
这样,你就在项目根目录中,注册了一个新的根命名空间 Acme。该命名空间下所有遵循 psr-4 规范的文件,就都有了自动加载的支持。
psr-0
psr-0 类型的 autoloader 需要遵循 psr-0 规范或者 psr-4 规范。
{
"autoload": {
"psr-0": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": "src/",
"Vendor_Namespace_": "src/"
}
}
}
psr-0 规范,采用的是 PEAR 风格的约定,与命名空间不同,PEAR 类库在类名上采用了下划线分隔。
php-fig 组织不赞成使用 psr-0 自动加载规范,而改用 psr-4。也就是说 psr-4 已经取代了 psr-0。
目前,绝大多数的第三方包都是采用 psr-4 自动加载规范。
classmap
classmap 类型的 autoloader,无需遵循 psr-0 和 psr-4 规范。
如果你想对没有定义命名空间的目录或者文件,也添加自动加载的支持。就可以使用 classmap 类型的 autoloader 。
{
"autoload": {
"classmap": ["database/", "lib/", "Something.php"]
}
}
files
files 类型的 autoloader,专门用来自动加载单个文件,也无需遵循 psr-0 和 psr-4 规范。
files 类型的 autoloader 常用来加载辅助函数文件。
{
"autoload": {
"files": ["src/MyLibrary/functions.php", "helper/helpers.php"]
}
}
autoload-dev
autoload-dev 代码块,用于定义开发环境中专用的 autoloader。
对于仅用于开发环境的自动加载规则(autoloader),推荐写到 autoload-dev 代码块中。
比如,常见的测试用例等等。
{
"autoload": {
"psr-4": { "MyLibrary\\": "src/" }
},
"autoload-dev": {
"psr-4": { "MyLibrary\\Tests\\": "tests/" },
"classmap": [ "tests/TestCase.php"]
}
}