verdor/composer/目录下有四个配置文件:
getLoader()这个方法会先把这些配置文件放到ClassLoader的私有属性中。
然后通过$loader->register(true);来调用spl_autoload_register()
1 2 3 4 |
|
spl_autoload_register()把loadClass()方法注册到了autoload队列中,然后当PHP引擎试图实例化未知类的操作时,就会根据类名和命名空间加载这个类文件。
1 2 3 4 5 6 7 8 |
|
总结: 1. 命名空间前缀对应相应的文件夹 2. 类名和文件名相同,文件后缀为PHP
{
"psr-4" : {
"Foo\\": "src/"
},
}
按照PSR-4的规则,当试图自动加载 “Foo\Bar\Baz” 这个class时,会去寻找 “src/Bar/Baz.php” 这个文件,如果它存在则进行加载。
{
"psr-0" : {
"Foo\\": "src/",
},
}
PSR-0有此配置,那么会去寻找 “src/Foo/Bar/Baz.php”
PSR-0当试图自动加载 “Foo\A_B” 这个class时,会去寻找 “src/Foo/A/B.php” 这个文件.
参考链接http://www.tuicool.com/articles/mARrMj6
{
"autoload": {
"classmap": [
"database"
],
}
}
classmap 做的是类名和文件所在位置的映射
写的很好的一个关于composer的文章 https://laravel-china.org/topics/1002
文章来源: http://hanfeng.name/blog/2015/08/17/composer-autoload/