composer中可以配置四种自动加载规则,你可能会熟知其中的一两种,但可能不知道有四种吧?不知道的一起来随我学习吧。
psr-4是目前最新的、最受欢迎的、广泛在各种composer包、PHP框架中使用的自动加载方式。
我这里不说明psr-4的加载规则了,因为官方文档比我说明的更规范、更清楚,如果不知道psr-4可以查看文章末尾的参考文章。
这里只说明怎么在composer.json
中配置psr-4自动加载规则:
{
"autoload": {
"psr-4": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": ""
}
}
}
autoload
对象里面即为所有自动加载规则,包含psr-4和下面要介绍的三种。
psr-4
对象里面为多个键值对,每个键值对配置一个psr-4加载规则:
\\
结束(用两个反斜杠是为了转义),如果为空则表示全局命名空间(不要使用"\\"
表示全局命名空间)。/
结束,如果为空或者"./"
则表示当前项目根目录。如果一个基础命名空间对应多个基目录,那么可以将多个基目录放在一个数组里面:
{
"autoload": {
"psr-4": { "Monolog\\": ["src/", "lib/"] }
}
}
还可以将基础命名空间设置为空(不要使用"\\"
表示全局命名空间),这样全局命名空间便对应于指定的目录:
{
"autoload": {
"psr-4": { "": "src/" }
}
}
修改了autoload
字段后我们需要使用执行composer的dump-autoload
命令使之生效(每次修改都要重新执行):
composer dump-autoload
执行后我们可以在vendor/composer/autoload_psr4.php
文件中查看所有生成的psr-4规则。
psr-0是psr-4的前身,因为有缺陷而被psr-4代替了,现在已经被废弃了,不推荐使用。但是有些composer包(历史原因)还有用到,所以了解一下也是有必要的。
具体的psr-0说明可以看文章末尾的参考文章。
{
"autoload": {
"psr-0": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": "src/",
"Vendor_Namespace_": "src/"
}
}
}
psr-0
的配置方法基本和psr-4相同,不同的是:每个psr-0规则的键值对的中,“值”不是指基础命名空间对应的基目录,而是指包含该基础命名空间的父目录!父目录这一点也是psr-0的缺陷,如果不明白为什么可以做做实验。
psr-0 生成的规则我们可以在vendor/composer/autoload_namespaces.php
文件中查看。
classmap 自动加载在psr规范里面并没有,是composer自己加的一种加载规则。
你可以指定一些要搜索的类文件目录或者具体类文件路径,执行composer的dump-autoload
命令后,会自动扫描这些目录下的类文件和具体类文件,生成一个类名到类文件路径的映射表,这也是叫classmap的原因。
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
classmap
是一个数组(注意不是对象也不是一个字符串),每个元素指定一个类文件搜索目录或者直接指定一个类文件路径。
classmap 生成的规则我们可以在vendor/composer/autoload_classmap.php
文件中查看。
files 自动加载在psr规范里面没有,也是composer自己加的。
files 自动加载相对来说就比较简单了,你可以指定一些php文件,这些文件每次总是会被载入,而不管有没有用到里面的类。一般用来载入经常使用的函数库文件:
{
"autoload": {
"files": ["src/MyLibrary/functions.php"]
}
}
files
是一个数组(注意不是对象也不是一个字符串),每个元素指定一个需要加载的php文件路径。
files 生成的规则我们可以在vendor/composer/autoload_files.php
文件中查看。
暂无评论,赶紧发表一下你的看法吧。