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來從新生成加載文件.

相關文章
相關標籤/搜索