php中的composer是用来干什么的?

这个包管理器在项目中主要是来干什么的?用来版本控制还是方便更新项目用到的一些库?
还是说用来对自己项目中的各个模块的调用关系的说明?
总之各位大大谁能讲下这个包管理器的功能用途

阅读 11.5k
4 个回答

结贴加总结吧:
对于现在来说,composer已经非常不陌生了。鉴于到现在这个问题的回答还是没有大的进展,我就自问自答了...
composer是一个多功能的工具,下载管理第三方包是其主要功能了,composer这个工具就是用php这个语言写的。
其主要的下载第三方包的功能

1. 作用

我们代码里经常会用的别人的代码包,比如框架、excel处理等。很久以前的项目里用到这些包,是要下载这些包,然后在代码里 include php文件的。

composer的下载功能就是自动完成 下载 include 这两步,当然前提是这些代码包要符合 composer 对包的定义,这些定义是在包代码的项目根目录下的 composer.json 文件里面。这个文件的描述可以去 composer 官网查看,这里只说下他的大概原理

2. 加载

php提供的是有文件加载的处理的 bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) 。相当于一个事件,当触发了文件加载,php会将这个消息发送给你注册的自定义加载函数,让你根据你自己定义的规则进行 计算决定文件路径,然后你还是要include 文件的。

3. 下载

要下载的第三方(或者自己独立出来)的代码包,这些包一般是在网络上(下载地址是可以自己配置的,默认是官网)。composer 可以通过curl等网络工具进行下载,当然 一些https的也需要 openssl库的支持,一般github上的release代码都是 tar.gz 的,所以composer还会帮你解析。下载完了移动代码到指定文件夹,在配合以composer设定好的加载处理方法(spl_autoload_register 的处理,可以去看下composer代码就清除了),完成了自动加载(当然,自动加载最基本的还是 include)。

4. 版本

composer提供的有版本指定,这些版本其实是 你github的 tag。版本指定一般是为了解决 不同版本之间不兼容的问题,一般还是指定固定版本,实际经验中我们使用的这些第三方开源代码包之间的兼容性还是有一定出入...

以上我问题回答了。当然,composer还点缀了一些其他的功能。

对自己问题的拆解
1. 这个包管理器在项目中主要是来干什么的?
2. 用来版本控制还是 
3. 方便更新项目用到的一些库?
4. 还是说用来对自己项目中的各个模块的调用关系的说明?

问题1 已经在上面回答了
问题2 代码版本控制是 git
问题3 更新库是有这个功能,因为composer有下载功能
问题4 可以利用composer的自动加载功能将自己项目进行拆分,一般模块调用关系说明是 IoC来实现的

这个牵涉到一个包的概念.
我们程序中其实会有很多部分,
在日积月累的开发中会发现是重复公用的代码,
有一部分聪明的程序员将这部分提取了出来,
自己封装了类形成一个又一个可以直接用的类工具,
这些工具类慢慢就形成了包.

这些包开始被放在网络上被人下载,
但是没有形成一个统一的管理体系,
聪明的PHPer借鉴了pip和gem的包管理方式,
制作了composer讲零散的包统一进行管理,
并且还提供版本的控制功能.

简单的说composer就是一个包的版本控制工具

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏