composer支持四种自动加载的方式:PSR-0 / PSR-4 /Classmap / Files , 其中 PSR-4 是当前推荐的加载方式。
什么是 PSR ?
PSR 是 PHP Standards Recommendations(PHP 标准建议)的缩写
- Files 是最简单的加载方式,这种方式不管加载的文件是否用到始终都会加载,而不是按需加载
修改项目根目下的composer.json, 加入 "autoload" 项:
{
"require": {
"monolog/monolog": "1.0.*"
},
"autoload": {
"files": ["controllers/Controller.php"]
}
}
需要加载哪个文件,直接写入文件路径即可,路径相对项目的根目录。然后执行composer dump-autoload,该命令可以遍历我们项目根目录以及各依赖库下的 composer.json 文件然后重新生成 vendor/composer/autoload_* 跟自动加载相关的配置文件(运行 composer dump-auto 重新注册自动加载映射关系)。
composer dump-autoload 之后composer会把配置值写入与 Files加载方式对应的 vendor/composer/autoload_files.php 配置文件中。
- Classmap 加载方式也很简单,composer会搜寻我们指定的目录或文件,并把搜寻到的结果写到Classmap对应的 vendor/composer/autoload_classmap.php 配置文件中。 修改composer.json :
{
"require": {
"monolog/monolog": "1.0.*"
},
"autoload": {
"classmap": ["controllers/"]
}
}
以上配置会让composer搜寻 controllers 目录下的所有类,并生成配置文件,同样先 composer dump-autoload 下
- PSR-0 ,这种加载方式已经过时,所以不推荐在新项目中使用,请用 PSR-4 来代替它。
修改composer.json 如下, 然后执行composer dump-autoload
{
"require": {
"monolog/monolog": "1.0.*"
},
"autoload": {
"psr-0": {"controllers\": ""}
}
}
以上配置的意思是指定 controllers命名空间 所在的父级目录,由于controllers命名空间所在的父级目录就是项目根目录, 所以配置值用 "" ,composer dump-autoload后配置会写入 PSR-0对应的 vendor/composer/autoload_namespaces.php 配置文件中
- PSR-4 是 PSR-0 的升级版,是目前推荐的自动加载方式,这种方式使用的是按需加载。
修改composer.json 如下:
"require": {
"monolog/monolog": "1.0.*"
},
"autoload": {
"psr-4": {"controllers\": "controllers/"}
}
}
注意和PSR-0 的 composer.json 做对比,PSR-4 和 PSR-0 的主要区别是,PSR-4指定的就当作当前命名空间的目录, 而PSR-0 指定的是当前命名空间的父目录。composer dump-autoload 一下, 配置会写入PSR-4对应的 vendor/composer/autoload_psr4.php 文件中