借助 composer 实现自动加载,可以在 composer.json 中配置 autoload 字段。
当前支持 psr-0 ,psr-4 ,classmap ,file 四种自动加载模式。推荐使用 psr-4 。
psr-4
psr-4 设置的是命名空间和路径的映射。{
"autoload": {
"psr-4": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": "",
"Goods\\":"src/"
}
}
}
一个命名空间可以映射到多个目录,后面可以传入数组。{
"autoload": {
"psr-4": {
"Monolog\\": ["src/", "lib/"]
}
}
}
后面设置的路径是相对于 composer.json 文件设置的一个相对目录。
以上配置的意思是:当我们加载 Monolog\Logger 这个类的时候,要找的文件是 src/Logger.php 。规则是类前面和psr-4 匹配的部分对应一个物理路径,后面的部分加上文件后缀作为第二部分。把两部分组合起来拼接成这个类的真实物理路径。
前面的命名空间可以留空,这样在前面的匹配都没找到这个类的情况下,会在后面的路径里面查找。
psr-4 的对应结果会存在 vendor/composer/autoload_psr4.php 中。
psr-0
psr-0 的设置格式和 psr-4 基本一样。
他们的不同之处在于 psr-0 的文件路径需要包含前缀。也就是 Monolog\Logger 对应的文件是 Monolog/Monolog/src/Logger.php 并且类名中带有下横线的时候会转变成目录分隔符。
classmap
classmap 参数类型是数组,里面直接填目录名或者具体的php路径。{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
composer dumpautoload 之后,系统会在 vendor/composer/autoload_classmap.php 中存储一个类和文件路径的对应关系。
files
明确指定需要加载哪个文件。vendor/composer/autoload_files.php 中会储存对应结果。