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 来刷新自动载入