接觸過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';
以後就可使用這些第三方包了.工具
上面咱們演示瞭如何經過使用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標準已經不被推薦,因此咱們下面介紹一下其餘三種方式的使用.
假設咱們如今有以下的目錄結構:
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都幫咱們處理好了.
當咱們的目錄結構不符合PSR-4標準的時候,咱們也可使用這兩種方式來添加自動依賴.這兩種方式使用起來就至關簡單了.
"autoload":{ "files":["src/test.php"], "psr-4":{ "App//":"app/" }, "classmap":["lib/"] }
如上.files節點上添加src/test.php
,那麼composer就會自動爲你加載這個文件,使用classmap則會爲你加載lib/
目錄下的全部文件.修改完autoload的內容以後要記得執行composer dumpautoload -o
來從新生成加載文件.