首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

composer使用及工作原理

首先介绍一下什么是composer?它是PHP用来管理依赖关系的工具,在自己项目中通过composer声明依赖的外部工具库,使用composer安装这些依赖库。

在使用composer之前请大家先安装,不会的朋友可以直接进入composer官方下载安装页面根据提示安装

composer官方安装教材:https://pkg.xyz/#how-to-install-composer

我们来看看composer基本使用及相关命令的作用吧?

1.首先初始化配置文件:

composer init

初始化composer需要填写的信息

Package Nmae:当前项目包的名称(格式:github账号名称/SDK名称)

Description:当前项目的简介

Author:所属作者(格式:作者名 )

Minimum Stability:stable(稳定)、dev(开发包)、alpha、RC、beta

Package Type:项目类型(library:代表当前项目为一个SDK插件,project:完整的项目,例如框架)

License:许可协议(Apache-2.0,MIT等协议,可以自己随便填)

require:当前项目是否需要依赖其他的插件库,没有可以填no

require-dev:是否为开发版本(yes或no)

composer初始化之后会在项目根目录下生成一个composer.json文件。里面都是初始化时定义的参数,当然composer参数有很多,初始化只是设置了必要的参数。

为了方便别人搜索到你的项目,我们还可以在composer.json文件中定义项目的关键字。官方有更为详细的说明,需要可以进入composer架构页面查看

composer架构页面:https://docs.phpcomposer.com/04-schema.html

2.切换composer镜像源

# 通过composer命令切换镜像源

composer config repo.packagist composer https://packagist.phpcomposer.com

上述命令执行之后会在composer.json文件中添加如下配置信息

"repositories": {

"packagist": {

"type": "composer",

"url": "https://packagist.phpcomposer.com"

}

}

所以我们也可以直接修改composer.json文件来切换镜像源,只要把上面的配置信息修改即可。

3.安装项目依赖库及composer相关代码

composer install

安装完成后项目目录 结构如下所示:

4.安装第三方SDK

composer require SDK名称

执行上述命令后会自动修改composer.json文件,添加require配置选项并且更新composer.lock文件(如果composer.lock文件不存在自动新增),如下所示:

"require": {

"SDK名称": "SDK的版本"

}

5.更新第三方SDK

# 更新所有SDK

composer update

# 更新某个SDK

composer update SDK名

关于第三方SDK库,大家可以在PHP包存储库中搜索

PHP包存储库:https://packagist.org/

6.某个文件或者类的自动加载

实现文件自动加载需要修改composer.json文件,添加如下配置信息

{

"autoload":{

"files":["需要自动加载的文件路径"]

}

}

修改composer.json文件之后需要使用:composer dump 命令使其生效

实现类的自动加载也需要修改composer.json文件,在autoload配置项下面添加psr-4配置信息

{

"autoload":{

"files":["需要自动加载的文件路径"],

"psr-4":{

"命名空间":"该命名空间对应的目录"

}

}

}

命名空间格式:app\\home\\

注意修改完之后记得使用 composer dump 使其生效

上面的操作完成之后只需要在自己项目的入口文件中添加如下代码就可以在任何地方实现类的自动加载。

// 加载composer自动加载文件

require_once 'vendor/autoload.php';

如果你使用的是框架,无需引入。大部分框架已经引入该文件,可以直接使用composer所有功能。

7.composer实现原理

我们已经学习了composer基本操作,可是composer是如何实现自动加载的呢?composer在autoload.php文件中做了什么操作让框架可以实现自动加载的呢?

PHP有一个特殊的函数(spl_autoload_register)用于实现自动加载。下面我们来看一段PHP代码,看看类的自动加载原理

首先我们创建一个User类

class User {

}

然后我们再来看看类的自动加载原理:

/**

* 参数一:当我们在使用一个不存的类时回调的函数

* 参数二:回调或者注册类到队列时报错,是否抛出异常

* 参数三:是否将aotoload注册的函数加载到队列中

*/

spl_autoload_register('autoload',true,true);

/**

* 自定义的类的加载方法,给spl_autoload_register回调使用

* 参数:类的名称

*/

function autoload($className){

echo '需要自动加载的类名称:' . $className;

include './' . $className . '.php';

}

new User();

上述代码运行后打印的结果如下:

需要自动加载的类名称:User

上面打印结果可以看出,当我们使用一个不存在的类时PHP会调用spl_autoload_register注册的回调函数。我们在回调函数中再去加载这个不存在的类。这就是composer自动加载最基础的原理。有兴趣的朋友可以去看看vendor下composer相关的源码。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Od2sHqck9vnx-udGAR-aVOaw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券