接触过Laravel的同学都知道,Laravel使用Composer作为项目的包管理工具.但是Composer并不是Laravel独有的,Composer是PHP的包管理工具,这两者的关系就像pip于Python,npm于Node一样.但是发现真正项目中使用composer还是比较少的, 所以这里这里写一遍文章介绍Composer的使用,帮助那些对于Composer还是有点模糊的同学.此文跟Laravel没有任何联系.
安装Composer的方式就不讲了, 具体安装方式可以查看这里.
基本使用.
安装好Composer之后,只要在项目根目录新建compsoser.json
之后就可以使用composer了,这点跟npm很像.composer.json
的内容是以json格式书写的.
包管理工具最大的作用就是帮助我们管理包的依赖关系.当你的项目中需要一个日志系统的时候,你又不想去实现,想在网上找一找开源的日志系统.于是你找到了一个叫 monolog/monolog
的好东西.但是怎么在你的项目中使用它?这个时候就需要composer了.
在你的composer.json里面添加如下代码:
{
"require": {
"monolog/monolog": "~1.13"
}
}
前面说过,composer.json是以json格式书写的.require
表示当前项目依赖于哪些包.写好之后,只要执行composer install
,那么composer就会自动为我们下载这些包.下载好之后你会在项目中看到一个vendor
的目录.
your_project_root_dir/
composer.json
vendor/
.....
.....
你在composer.json
中记录的所有依赖都会被下载到这里.那么下载好之后如何使用这些包?我们都 知道在PHP中引入文件是一件很麻烦的事情,require, include, require_once, include_once
都有那么点问题,使用自动加载函数spl_autoload_register
吧,又得写一大堆逻辑.但是使用composer就很简单了,只要在你的index.php文件加上require_once __DIR__ . '/vendor/autoload.php';
之后就可以使用这些第三方包了.
autoload
上面我们演示了如何通过使用composer使用第三方包, 但是有时候我们项目自己本身也有很多依赖要处理,但是写include
之类总是不优雅,这个时候我们也可以使用composer来加载我们自己写的php代码.让composer来帮我们实现自动加载.
在composer.json有一个autoload字段就是来帮助我们实现自动加载的,其可以根据以下的4种定义方式来实现自动加载:
file
classmap
PSR-4
PSR-0
其中PSR-0和PSR-4是php编码标准.如果不清楚这个是什么东西的话, 可执行google.由于这里PSR-0标准已经不被推荐,所以我们下面介绍一下其他三种方式的使用.
PSR-4
假设我们现在有如下的目录结构:
your_project_root_dir/
app/
appTest1.php
sub/
appTest2.php
vendor/
composer.json
这么一来,根据PSR-4的标准, appTest1.php的命名空间应该是App
,而appTest2.php
的命名空间为Appsub
.
在composer.json添加如下代码:
"autoload":{
"psr-4":{
"App//":"app/"
},
}
其中autoload表明了这是为了实现自动加载.而psr-4
说明了我们这里使用PSR-4
的自动加载规范."App//":"app/"
表示App这个命名空间对应到app这个目录下.这个时候我们执行composer命令composer dumpautoload -o
执行完毕之后还是在index.php加上require_once __DIR__ . '/vendor/autoload.php'
,之后我们就可以直接使用app目录下的类而不用考虑自动加载的问题了, 因为composer都帮我们处理好了.
files&&classmap
当我们的目录结构不符合PSR-4标准的时候,我们也可以使用这两种方式来添加自动依赖.这两种方式使用起来就相当简单了.
"autoload":{
"files":["src/test.php"],
"psr-4":{
"App//":"app/"
},
"classmap":["lib/"]
}
如上.files节点上添加src/test.php
,那么composer就会自动为你加载这个文件,使用classmap则会为你加载lib/
目录下的所有文件.修改完autoload的内容之后要记得执行composer dumpautoload -o
来重新生成加载文件.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。