通过 composer的 install 1命令除了可以下载组件以外,还会在 vendor目录下提供一个自
动加载文件,只需要在项目中通过“ require'vendor/autoload php;”语句引入这个文件,在使
用下载的组件时就可以实现自动加载了。如上一小节的实例中,下载了 monolog组件,就
可以通过“ Smy Log= new \monolog\Logger( wangshuo)”语句直接使用组件中的类库,
而 autoload文件会自动加载相应的类文件。
实现文件自动加载需要有相应的规范进行约束,其中包括PSR0、PSR-4、 classmap和
files四种规范形式,其中PSR4是目前推荐使用的规范。这四种规范形式本质上是定义了
一个命名空间到实际文件的映射关系,通过这个映射关系,可以利用命名空间类精确定位到
相应文件的具体路径,进而实现“ autoload”自动加载功能。首先介绍PSR-0和PSR-4规范,
这两种规范相似。在 composer. ]son文件中可以直接添加 autoload字段实现命名空间到目录
的映射,如 Caravel框架中APP命名空间下类的自动加载设置如下
 

{
    "autoload":{
        "psr-4":{"App\\":"app/"},
        "psr-0":{"Bpp\\":"bpp/"}
    }
}

这里根据PSR-0和PSR4规范定义了两个映射关系,即命名空间“Ap”对应目录“app
和命名空间“Bpp”对应目录“bpp/”。在PSR-4规范下,假设创建一个 app/User. php文
件,则该文件需要包含 App User类,也就是说当使用“ Suser= new \App\Usert0”语句实例
化 App\User类时, autoload会根据定义的PSR4规范到目录app/下查找 User. php文件;在
PSR-0规范下,则需要创建一个 bppBpp/User. php文件,而该文件中包含 BppIUser类。这
里的区别就在于PSR4规范的目录不需要添加命名空间“App”,而PSR0规范的目录需要
添加命名空间“Bpp。
对于 classmap会扫描指定目录中所有的php和inc文件,并加载到 vendor/composer/
autoload classmap. php文件中,在该文件中会实现一个具体类与文件映射的关联数组,也可
以直接精确指定一个文件。通过 classmap可以生成不遵循PSR0和PSR4规范的自动加载
类库。对于下面的实例,就会搜索 database目录下的所有php文件和inc文件,并记录类
名与文件的对应关系。

{
    "autoload":{
        "classmap":["database"]
    }
}

对于在每次程序执行时都需要载入的文件,可以通过fles规范实现自动加载,通常经
常使用的函数库文件就使用这种载入方式,例如下面的实例每次都会加载
 

{
    "autoload":{
        "files":[
            "src/Illuminate/Foundation/helpers.php",
            "src/Illuminate/Support/helpers.php"
        ]
    }
}