PHP包管理工具--Composer自动加载

接触过Laravel的同窗都知道,Laravel使用Composer做为项目的包管理工具.可是Composer并非Laravel独有的,Composer是PHP的包管理工具,这二者的关系就像pip于Python,npm于Node同样.可是发现真正项目中使用composer仍是比较少的, 因此这里这里写一遍文章介绍Composer的使用,帮助那些对于Composer仍是有点模糊的同窗.此文跟Laravel没有任何联系.php

安装Composer的方式就不讲了, 具体安装方式能够查看这里.npm

基本使用.

安装好Composer以后,只要在项目根目录新建compsoser.json以后就可使用composer了,这点跟npm很像.composer.json的内容是以json格式书写的.json

包管理工具最大的做用就是帮助咱们管理包的依赖关系.当你的项目中须要一个日志系统的时候,你又不想去实现,想在网上找一找开源的日志系统.因而你找到了一个叫 monolog/monolog的好东西.可是怎么在你的项目中使用它?这个时候就须要composer了.app

在你的composer.json里面添加以下代码:composer

{
  "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来帮咱们实现自动加载.ui

在composer.json有一个autoload字段就是来帮助咱们实现自动加载的,其能够根据如下的4种定义方式来实现自动加载:google

  • 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来从新生成加载文件.

相关文章
相关标签/搜索