平时写项目我们都是使用别人的框架,也没有去研究文件的加载过程,这里从头分析下composer构建自动加载的过程及相关问题
流程:
1:安装composer并创建新项目,这里只简单创建了App 文件夹
2:配置composer.json 文件,需要使用composer 管理项目必须要有composer.json文件,这里只需要注意autoload 模块的 匹配,简单配置如下
{
"name": "composer test",
"type": "project",
"description": "test",
//需要的依赖
"require": {
"php": ">=7.0.0"
},
//自动加载规则
"autoload": {
"psr-4": {
//命名空间: 文件路径
"App\\": "App/"
}
}
}
3:运行命令: composer install,成功后会生成一个vendor 文件夹,里面有自动加载相关的文件
4:使用
a>: 在App 文件夹 创建Test 类,这个命名空间必须按照上面composer.json 约定的路径方式命名
<?php
/**
* Created by PhpStorm.
* User: 05
* Date: 2021/5/6
* Time: 10:40
*/
namespace App;
class Test{
public function test(){
echo "test";
}
}
b>: 在index.php 加载使用文件
<?php
/**
* Created by PhpStorm.
* User: 05
* Date: 2021/5/6
* Time: 10:43
*/
//引入composer 生成的自动加载文件
require_once dirname(__FILE__)."/vendor/autoload.php";
//声明使用的类
use App\Test;
$test=new Test();
$test->test();
相关问题:
1:项目中新增文件夹,添加的类库为什么不能引用?
a:如果新的文件夹在已有的文件夹内,且符合psr-4的规范 是可以直接引用的,但是如果文件夹新增在最外层或者命名空间不是psr-4规范 则需要在composer.json 里对应配置自动加载规则后运行composer dump-autoload 命令更新加载文件加载匹配文件,如下图类 T 是可以直接使用的
2:我在 vendor 内新建文件夹创建的类 为什么不能引用?
A>: vendor 内的文夹默认为composer 自动引用的依赖库文件夹,一般是不能手动添加的,如果一定要手动添加,那在添加后需要手动修改 autoload_static.php(php>=5.6) 或者 autoload_psr4.php (有些框架会自己实现自动加载需要查看具体实现)文件里自动加载的匹配路径,这里一般是composer requer 后自动更新的,手动操作后下次composer 自动更新配置后会被覆盖
下面是tp某框架的自动加载,全程不会加载autoload_static.php
3:composer 构建流程
a:按照json 配置的 require配置 加载文件的依赖库,加载依赖时也会先加载对应的compose.json 文件 去检测它的require 依赖,直到把所需的依赖全部下载下来(在vendor内)
b:按照json autoload 配置生成(或者更新) autoload 相关配置文件
c: 项目引入autoload 文件实现自动加载
PS:composer常用命令
composer install; #安装包,根据composer.json
composer update; #更新包,升级composer.json的所有代码库(如果能升级的话)
composer search 关键字; #搜索包,搜索composer可用的包
composer require 包名称; #引入包,会在composer.json新增一条包配置,并下载该代码包
composer remove 包名称; #删除包
composer dump-autoload;#生成当前命名空间与类库文件路径的一个映射,运行时加载会直接读取这个映射,加快文件的加载速度。
最后:如何构建自动composer 依赖库?
请看:构建自己的composer依赖包