越来越多的语言自带类库管理器,但是作为做好的语言PHP却没有,这不行,于是就诞生了Composer。虽然很久之前就知道,但是一直都是自己写类,所以一直没有用过,最近觉得再不去了解一下,等他火了,我就落伍了,So,我们来学习一下。
Composer是干咩的?
Composer是一个PHP的类库依赖管理器,比如你项目中使用了一些别人的公开类库,而你又不想去手动下载,那么Composer就会自动帮你下载,保证你的程序运行。
如果你的项目天大,包含了几万个开源类库的使用。那么你的代码包会有几个GB,但是有了Composer,你的代码包可能就只有几十MB。就像linux里的yum -y命令一样,你只需要运行你要的,它会自动帮你解决关联的必须程序。
试想一下,如果去部署一个项目,一个优盘,拷贝一个十几兆的项目到服务器上,然后启动Composer解决关联类库,然后Composer会自动下载了好几个GB的关联类库,然后运行的时候,Composer会帮你处理好关联,让你调用类库不会失败。
好了,Composer就是这么个类库管家。它更像是一个公共类库目录,你只要圈出你要的类,他就会把类送到你的项目中去,从而达到,省事的目的。
Composer优势是咩啊?
Composer类库来自Github等开源平台,如果你下载的是类库文件,那么只能自己更新,如果你用Composer,那么类库是自动同步更新,换句话说,有成千上万的程序帮你维护类库。
如果我不用其他类库或者我的类库都是固定的几个需要Composer吗?
不需要,Composer只是类库依赖工具,如果你的类都是自我研发,自己开发类使用,那么Composer对你来说,没有意义。
能不能举个栗子?
你的项目需要使用二维码。以往你是去找个二维码类,然后放到你的项目中,然后调用使用。
有了Composer,你只需要配置好,然后直接使用,而且随处调用(全局安装方式)。不用去下载,不用担心版本过老。
如果你需要的类有几百个呢?Composer的优势就体现出来了,你不用去一个个下载,只要把你要用的类写进Composer的配置文件,就完事了,完事了,事了,了。。。。
Composer有啥危害?
Composer对于一个热爱程序的人来说,危害很大。因为用时间久了就真成了搬砖工了,只需要写调用代码,而不用写实现方法,因为都是引用别人写好的类,慢慢的,技能下降。。。。好可怕。。。
好了说了那么多,来看看怎么使用吧。
————安装————
运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的,但对于任何不兼容项安装程序都会抛出警告。
我们将从包的来源直接安装,而不是简单的下载 zip 文件,你需要 git 、 svn 或者 hg ,这取决于你载入的包所使用的版本管理系统。
下载安装文件
linux:
打开命令行或命令界面,输入:
curl -sS https://getcomposer.org/installer | php
或
curl -sS https://getcomposer.org/installer | php -- --install-dir=bin
第二种方式可以指定安装目录
如果安装过程中出现错误,那么你可以使用以下命令来安装:
php -r "readfile('https://getcomposer.org/installer');" | php
该命令会检测环境后安装。
全局化
你可以把composer转移放到系统的PATH目录中,这样就可以全局访问。
mv composer.phar /usr/local/bin/composer
windows:
下载地址:https://getcomposer.org/Composer-Setup.exe
运行它将安装最新版本的 Composer ,并设置好系统的环境变量,因此你可以在任何目录下直接使用 composer 命令。
OSX(MAC):
Composer 是 homebrew-php 项目的一部分。在苹果系统上使用brew安装。
brew update
brew tap josegonzalez/homebrew-php
brew tap homebrew/versions
brew install php55-intl
brew install josegonzalez/php/composer
安装完之后,我们用下面命令来调用下看看是否安装成功
php composer.phar
或
composer
注意,如果linux系统做了全局化,那么可以不用输入前缀php,直接使用composer命令即可
————使用————
调用方法
调用方法,默认调用方法是
php composer.phar
或
composer
在linux全局安装后,可以直接使用composer来代替php composer.phar命令。
composer.json
安装好了Composer怎么用到项目中去呢?这里我们使用composer.json文件。用过一些开源框架比如laravel,你就会发现他们的根目录有个composer.json文件,这说明他们的项目支持了Composer。
那怎么自己写呢?
composer.json本身就是一个json文件,所以使用json格式来配置里面的内容。例如:
{
"require": {
"monolog/monolog": "1.0.*"
}
}
这样,就是告诉Composer,需要加载monolog提供的monolog程序的1.0.*版本。
因为每个人都可能起名重复,所以加载方式是用户名+程序名+版本号的方式加载,为了方便理解,这里扯淡一个程序:
{
"require": {
"gulang/dashaqi": "1.0.0"
}
}
上面的意思就是加载gulang开发的dashaqi程序的1.0.0版本。
版本号可以有几种方式来定义
具体的:1.0.1 |
范围的:>=1.0.0 >=1.0.0,<2.0.0 >=1.0.0,<2.0.0|<3.0 |
通配的:1.0.* |
赋值运算符的:~1.2 等同于 >=1.2,<2.0(使用 ~ 指定最低版本,但允许版本号的最后一位数字上升。) |
获取依赖包
我们配置好了composer.json文件之后,接下来我们就要去获取依赖包了。命令行进入项目根目录(composer.json文件目录)
然后输入:
php composer.phar install
或
composer install
这样,就会自动开始下载依赖包到一个vendor的目录,这里Composer建议把第三方的类库放到vendor文件夹中管理,默认即可。
当依赖包下载完毕之后,你的项目目录里就会多出来一个vendor文件夹,和一个composer.lock文件。
composer.lock文件是在安装依赖后,Composer 把安装时确切的版本号列表写入 composer.lock 文件。这将锁定该项目的特定版本。如果你的项目是转移安装的,记得连同composer.lock文件一起拷贝,因为install命令在识别的时候会优先识别lock文件,如果lock文件中已经指定文件版本,则会忽略json文件中的版本。这样做的目的是避免一些三方库升级导致不兼容的问题。lock指定的版本就是你的开发用的版本,这样做就能保证调用的方法不会出错。当然如果该版本的三方库存在漏洞等,就要去lock文件里删除这个三方库,让install使用json文件来获取最新的版本。同时你也可以使用update命令来升级版本
composer update
如果你怕全部升级导致不兼容,可以指定单个依赖包来升级
composer update monolog/monolog
自动加载
自动加载,在Composer加载完依赖包之后,会在vendor目录下创建一个antuload.php文件,这个是自动加载文件。在项目中直接使用即可。
include_once("./vendor/autoload.php");
PHP调用依赖包
直接上例子,这里我们使用了dsgygb/text2pic的类库,是一个文字生成图片的程序:
generate("hello world");
if($result["message"]=="ok"){
var_dump($result);
echo '';
}else{
echo '运行失败';
}
运行之后的结果
我们看到运行已经成功了
到这里,Composer的用法就已经说完了。
————资源包————
虽然Composer那么强大,但是我怎么知道我能安装哪些库呢?
这里就要用到一个网站Packagist(https://packagist.org/)
Packagist是composer的资源库,直接在网站上搜索你要的功能的关键字即可,支持中文哦。
[传送门] Packagist
[传送门] Composer