1. composer是什么?
Composer是PHP的包依赖管理工具,它可以解决包之间的依赖关系,帮助PHP程序员更好地管理代码。Composer允许你在项目中定义所需的库,然后它将自动处理这些依赖关系并将它们安装在您的项目中。
使用Composer,我们可以通过命令行把第三方库添加到我们的项目中,这样能够快速地把需要的库加入到我们的项目中,而不用再手动去下载这些库。
2. composer如何实现自动加载?
2.1 autoload文件
自动加载是Composer的其中一个主要功能,Composer通过生成并维护一个autoload.php文件来实现自动加载。 autoload文件包含了所有需要自动加载的类的路径和逻辑,它可以做到在我们需要使用某个类时,自动加载需要的类文件。
我们可以使用以下方式生成autoload文件:
composer dump-autoload
运行此命令将会重新生成autoload.php文件。
2.2 composer.json
自动加载的机制依赖于Composer.json文件,这个文件描述了项目所依赖的composer包的信息,包括包名、版本、作者、依赖项等。
Composer能够自动扫描Composer.json文件中的配置,然后自动生成autoload文件。下面是一个Typical Composer.json文件:
{
"name": "myproject/myproject",
"description": "This is my project",
"type": "project",
"require": {
"php": ">=5.3.0",
"monolog/monolog": "1.*",
"doctrine/dbal": "2.4.*",
"vendor/package": "1.3.2",
"someother/vendor": "2.0.1"
},
"autoload": {
"psr-4": {
"MyProject\\": "src/"
}
}
}
Composer.json文件由两部分组成,上面配置文件的意思是描述项目的类型,名称,描述和依赖库情况的。require部分描述的是当前项目所需要的依赖项,这些依赖项会在运行composer install时自动下载。
2.3 autoload配置
autoload字段是一个关联数组,其中有两个数组:psr-0和psr-4。其中psr-0、psr-4均为自动加载标准中的规范,主要区别是psr-0使用下划线'_'作为namespace和类名之间的分隔符,而psr-4是直接使用"\"分隔namespace和类名。
使用psr-0加载时,有限从类名的开头开始匹配,直到不能再匹配为止。 例如,当你请求一个名为“Example\Some\Namespace”的类时,Composer将从autoload.php文件中找出"Example/Some/Namespace.php"。
这里是一个自动加载的演示,不过需要自行创建脚本来运行它。假设有一个类```App\Controllers\HomeController```需要被加载:
// install the autoloader
require_once __DIR__.'/vendor/autoload.php';
// use the autoloader
use App\Controllers\HomeController;
//instantiate the class
new HomeController();
2.4 文件自动加载流程
Composer实现自动加载的流程如下:
Composer读取当前项目的Composer.json文件,并解析为一个对象的结构。
Composer获取到当前项目的vendor目录,遍历所有在composer.json中声明的autoload规则。
Composer匹配并加载请求的类文件。
当加载一个类时,Composer会做以下流程:
读取Classmap,尝试找到类所在的文件
如果classmap字段不存在,尝试使用Prefix关联数组来查找类文件。
如果也没找到,Composer将在PSR-0定义中查找类文件。
如果仍旧没有找到,Composer将在PSR-4配置中查找类文件。
3. 总结
Composer作为一个PHP的软件包依赖管理工具,可以大大简化项目中包的管理,避免出现不兼容的问题。而自动加载机制更是让开发者无需手动加载文件、解决路径问题等,大大提高了开发效率。另外,学习composer可以提高PHP的编程技巧,提高项目的可维护性。