composer中的autoload
composer的autoload可以轻松的实现php的自动加载。在composer.json
中添加autoload
字段即可。当前支持 PSR-0
PSR-4
classmap
解析和files
包含。官方推荐PSR-4标准(添加类时不需要重新生成加载器)。
PSR-4
Under the psr-4
key you define a mapping from namespaces to paths, relative to the package root. When autoloading a class like Foo\\Bar\\Baz
a namespace prefix Foo\\
pointing to a directory src/
means that the autoloader will look for a file named src/Bar/Baz.php
and include it if present. Note that as opposed to the older PSR-0 style, the prefix (Foo\\
) is not present in the file path.
Namespace prefixes must end in \\
to avoid conflicts between similar prefixes. For example Foo would match classes in the FooBar namespace so the trailing backslashes solve the problem: Foo\\
and FooBar\\
are distinct.
The PSR-4 references are all combined, during install/update, into a single key => value array which may be found in the generated file vendor/composer/autoload_psr4.php
.
实例:
{
"autoload": {
"psr-4": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": ""
}
}
}
如果需要在多个目录下搜索相同前缀,可以以数组的形式指定。
{
"autoload": {
"psr-4": { "Monolog\\": ["src/", "lib/"] }
}
}
也可为所有命名空间指定默认文件夹:
{
"autoload": {
"psr-4": { "": "src/" }
}
}
classmap
classmap
引用的所有组合,都会在 install/update
过程中生成,并存储到 vendor/composer/autoload_classmap.php
文件中。这个 map
是经过扫描指定目录(同样支持直接精确到文件)中所有的 .php
和 .inc
文件里内置的类而得到的。
你可以用 classmap
生成支持支持自定义加载的不遵循 PSR-0/4
规范的类库。要配置它指向需要的目录,以便能够准确搜索到类文件。
实例:
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
相关链接
Example Implementations of PSR-4