大家好,欢迎收看猿话!
Composer是 php 用来管理依赖(dependency)关系的工具,类似NodeJs中的npm、Ruby中的bundler。使用Composer,你可以在自己的项目根目录的composer.json中声明所依赖的外部工具库(libraries),然后在composer.json文件所在目录执行composer install命令,Composer 就会帮你安装这些依赖的库文件。如下:
正因为Composer的这个优点,由于现在很多框架都支持使用composer进行组件管理,如ThinkPHP、Laravel等。
那为什么使用Composer下载的组件,就可以自动加载到项目中,而不需要再手动include呢?
这主要得益于PHP的自动加载功能。
什么是自动加载?
自动加载是PHP从5.0开始支持的一个功能,也就是当我们实例化一个不存在的类时,PHP会尝试调用自动加载机制引入相应的类文件。
PHP自动加载机制有两种方式,一种是通过__autoload(),另一种是通过spl_autoload_register()。PHP官方推荐使用第二种方式,因为第二种方式可以多次调用,更灵活,而且从PHP7.2开始,第一种方式也不再支持了。
当我们在composer.json文件所在目录,执行composer install命令后,composer会创建vendor目录,并将composer.json文件中,require字段指定的依赖组件,下载下来放置其中,同时还生成一个autoload.php文件。
这里的autoload.php是使用composer下载下来的组件可以自动加载到项目的关键。如果你打开文件,你会看到这一段代码,如下:
这里表示使用Composer工具下载的组件,由composer组件来负责自动加载。
打开ComposerAutoloaderInita224064b63645c6fcb9c9a314d8b5a82类文件,你可以看到,如前面说的一样,composer组件控制自动加载的核心代码,使用spl_autoload_register()方法来注册自动加载函数,实现文件的自动加载。
所以,要想项目中可以直接使用composer工具下载的依赖包,你只需要在项目中加载vendor/autoload.php文件即可,如下: