使用Composer管理PHP依賴關係

發表在個人博客:http://starlight36.com/post/composer-in-php php

簡介

如今軟件規模愈來愈大,PHP項目的開發模式和許多年前已經有了很大變化。記得初學PHP那會兒,boblog是一個很好的例子,幾乎能夠表明 PHP項目的開發模式。當時PHP 5.x以上的版本剛開始流行,仍然有大量的生產環境使用PHP4.x。因爲歷史遺留的問題,OOP思想在PHP項目中還不是那麼普遍流行。隨着 PHP5.3的發佈,PHP項目規模的擴大,在其餘語言領域大展身手的OOP開發模式也在PHP中嶄露頭角。 git

大型項目不多是從頭開始的,使用社區已經提供的資源能夠爲項目帶來很大的便利。然而各自爲政的打包方式、依賴關係的處理,致使了很難將兩個開源項 目集成到一塊兒。雖然有pear這種PHP官方支持的包管理工具,可是依然沒有很好的統一的依賴關係管理的辦法。直到Composer的出現。 github

Composer的依賴關係管理風格,看上去更像Java的Maven。項目編譯和打包、依賴關係的解決均可以很輕鬆的實現。不再用費神去尋找或者更新第三方庫,或者將他們集成到一塊兒。這一切所有均可以交給Composer來完成。 shell

例子

首先來看一個相似於Helloworld的例子,讓咱們對Composer先有一個感性的認識吧。 json

如何在一個PHP項目中啓用Composer,很簡單,只須要在項目根目錄中建立一個composer.json文件便可,它包含以下內容: composer

{
	"require": {
		"monolog/monolog": "1.2.*"
	}
}
這樣咱們便添加了對monolog這個庫的引用。沒錯,就是這樣簡單。不過,你還須要使用composer來爲你更新依賴包,打開你的Shell,切換到項目目錄下執行:
composer install

這時,Composer便自動從互聯網上更新指定依賴的庫了。你會發現你的項目文件夾裏面多了一個vendor文件夾,那就是依賴庫包了。 curl

接下來,你須要在你的系統的公共入口文件中引用自動加載器,以便自動加載類: 工具

require 'vendor/autoload.php';

安裝

上面的例子讓你們對composer的使用有了一個大概的認識。下面將向你們介紹如何在PHP環境中安裝composer。 post

Unix/Linux/OSX環境

很幸運,利用Unix Like環境安裝composer是一件很簡單的事情。只須要一行命令: 網站

curl -sS https://getcomposer.org/installer | php
此時會爲你在當前工做目錄安裝composer.phar文件,使用php composer.phar便可運行。固然,你可能更想讓composer變成像其餘同樣的Unix命令,很簡單,只須要再加一步:
mv composer.phar /usr/local/bin/composer
注意,在權限受限的系統上,你可能須要使用sudo命令來提高至管理員帳號執行。

這時,你就能夠像例子裏面那樣使用composer了。

Windows環境

Composer官方推薦使用安裝包進行安裝,聽說下載Composer-Setup.exe這個便可用嚮導模式安裝。

關於手工安裝的方法,請參考http://getcomposer.org/doc/00-intro.md的介紹吧。

自動加載

爲了實現PHP類的隨取隨用,類的命名空間定義建議聽從必定的規則。這種規則能夠是某一項目組約定的。不過爲了使得類庫統一,PHP-FIG項目指 定了一種PHP命名空間的規範PSR-0,被一些流行PHP項目採用。Composer支持這種規範的類庫自動裝載器,只須要向 composer.json文件中添加autoload節點便可:

{
	"autoload": {
		"psr-0": {"Acme\\": "src/"}
	}
}
關於PSR-0規範,有這麼幾點重要的要求:
  • 命名空間規範參考:\<Vendor Name>\(<Namespace>\)*<Class Name>
  • 每一個namespace須要一個頂層空間,即vendor name。用來指定在軟件包級別上區別。
  • 命名空間和PHP文件的路徑是一一對應的,最終命名空間分隔符會被轉爲DIRECTORY_SEPARATOR
  • 文件名必須爲類名.php

關於這個規範,能夠參考http://blog.mosil.biz/2012/08/psr-0-autoloading-standard/這篇文章。有關PSR-0的更多內容,能夠參考他們的官方網站:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md

注意,修改了autoload後,要從新使用composer install。

注意:composer默認類庫是使用PSR-0規範自動加載的。因此通常無需額外配置。

查找所需類庫

composer提供了一個類庫的「商店」,在這裏,你能夠當即找到想要使用的開源類庫包,而後把他們添加到你的項目中便可。傳送門:https://packagist.org/

打包本身的類庫

將本身的類庫貢獻給你們,首先須要爲本身的類庫設置打包信息(要首先保證本身的類庫是利用composer管理的)。在composer.json文件中設置:

{
	"name": "your-vendor-name/package-name",
	"require": {
		"php": ">=5.3.0",
		"another-vendor/package": "1.*"
	}
}
而後就能夠前去https://packagist.org/提交你的類庫了。

關於composer的更多信息,能夠參考:

快速入門:http://getcomposer.org/doc/00-intro.md

文檔們:http://getcomposer.org/doc/

包列表:https://packagist.org/

相關文章
相關標籤/搜索