作为程序员一定要保持良好的睡眠,才能好编程

composer 自动载入 autoload 的使用详解 psr0/psr4/classmap/files

发布时间:2019-09-08

classmap 模式 autoload_classmap

懒加载,扫描目录下的所有类文件,支持递归扫描, 生成对应的类名=>路径的映射,当载入需要的类时直接取出路径,速度最快

// classmap 扫描目录下的所有类文件 生成对应的类名=>路径的映射"classmap": [    "classmap/lib/src/"]

files 模式

自动载入的文件,主要用来载入一些没办法懒加载的公共函数

// 扫描目录下的所有文件生成 hash => 路径的映射  运行时实时加载
// 主要用来载入工具函数"files": [    "ext/common/functions.php",    "ext/system/functions.php"]

框架结构

这里我要尽可能把四种自动载入模式的特征举例出来,所以框架结构并不很合理,不要在意

./
├── app
│   ├── controllers
│   └── models
├── classmap
│   └── lib
│       └── src
├── composer.json
├── ext
│   ├── common
│   │   └── functions│   └── system
│       └── functions├── psr0
│   └── lib
│       └── src
└── psr4
    └── lib
        └── src

autoload 规则

编辑 composer.json 文件

{    "autoload": {        "psr-0": {            "Psr0\\Lib\\": "psr0/lib/src/"
        },        "psr-4": {            "Psr4\\Lib\\": "psr4/lib/src/",            "App\\Controllers\\": "app/controllers/",            "App\\Models\\": "app/models/"
        },        "classmap": [            "classmap/lib/src/"
        ],        "files": [            "ext/common/functions.php",            "ext/system/functions.php"
        ]
    }
}

刷新 autoload 规则

composer dump-autoload


autoload 中有psr4 和 classmap  files 这三种类型,

当使用classmap 、files这两种方式引入文件的时候,每一次新增文件都需要使用 composer update 或者 composer dump-autoload 这样的方式进行classmap 映射文件的更新。

有的时候,如何才能避免 增减一个文件,不要composer dump-autoload 呢?

这就是psr4 与其他两个类的不同之处。


当你添加了新的  psr-0/psr-4 的规则,或者在 classmap/files 规则相应的目录下新增了文件时,都需要执行 dump-autoload 来刷新系统的自动载入。


运行一下 compser dump-autoload 来刷新自动载入



内容来源:https://my.oschina.net/sallency/blog/893518