10

接触过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来重新生成加载文件.


JayChen
1k 声望104 粉丝

哒哒哒...我有一个漂亮的女票