在現代化的PHP開發當中,離開不了各類各樣的組件,那麼如何快速在項目中安裝和找到這些組件呢?composer正是爲這一目的而出現,若是你還不知道composer,那麼你就out了。那麼什麼是composer,它的做用是什麼?如何使用?本文將一一揭曉。php
在說composer以前,咱們先來了解一下什麼組件。由於組件和composer之間密切相關,要想知道composer是如何工做的,咱們要先清楚什麼是組件。git
組件是打包的代碼,用於咱們在實際項目中解決某個問題。好比你要輸出一段漂亮的數據,擺脫var_dump和print_r函數,那麼咱們就可使用組件var-dumper組件;咱們要寫日誌,就可使用monolog來實現。這些組件,已經有PHP開發者開發出來,咱們在項目中當有這樣的場景的時候,直接拿來用就能夠。github
一句話來歸納:別人已經造好的輪子,咱們爲何不拿來用呢?咱們徹底不用重複實現已經實現了的功能,應該要把更多時間用在項目的長遠目標上。json
咱們在使用PHP組件的時候,要先判斷這個組件是不是咱們須要的,是否有一些功能還不嚴謹,就像在菜市場買菜,好壞都有。那麼好的組件,基本上都具備這些特徵:api
組件的做用單一,能很好的解決一個問題。就像咱們平時在項目中寫方法同樣,一個方法只作一件事情。數組
PHP組件代碼很少,由於它只爲了解決某個問題而生產。markdown
PHP組件之間能夠進行良好的合做。PHP的組件之間能夠進行合做,以便解決更復雜的問題。並且組件都會放在專屬的命名空間中,當咱們引入的時候,也不會與其餘組件形成衝突。composer
PHP組件由於體型很小,因此測試起來也很方便。ide
PHP組件的文檔應該很完善,可讓開發者們快速瞭解這個組件的安裝、使用。函數
咱們在簡單瞭解了組件以後,應該會知道組件的好處了。那麼咱們如何快速找到組件呢?依賴百度和google搜索類庫嗎?不不,咱們已經有了一個專門放置組件的網站Packagist,這個網站就像一個巨大的組件倉庫,咱們能夠在裏面搜索任何咱們想要的組件,http、dump、route都有,並且這裏的組件都是通過開發者們嚴格測試過的。若是在搜索的時候不知道哪一個組件好的話,就去選擇那些使用量高、訪問較多的吧,由於通常這些基本上都會沒有什麼大問題。固然不排除還有一些使用量不高可是仍然很優異的組件,這就須要咱們去挖掘了。
在瞭解了組件以後,咱們來講正題———Composer。若是說Packagist是組件庫,那麼composer就是PHP組件管理工具了。composer是PHP組件的依賴管理器,它在命令行中使用。一般在你須要使用什麼組件的時候,你只須要告訴composer,composer就會自動幫你安裝在你的項目中,只須要一個命令,就是這麼簡單、強勢。
國內小夥伴在安裝composer的時候,可能會遇到不少問題。我在當初安裝composer的時候,也走了很多彎路,如今這裏推薦一個快速安裝composer的方法,打開命令行,執行如下命令:
在使用這些命令以前,首先確認已經安裝了php,而且把php設置在了全局變量中,打開命令行輸入php -v可以看到php版本信息
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
以上三條,請依次輸入,做用分別是
如何全局安裝請看:
設置完以後,在命令行輸入composer 能夠看到composer版本信息。
上述中介紹瞭如何安裝composer,本章就來講下composer如何使用。咱們先模擬下載一個PHP組件,首先咱們在Packagist網站搜索dump,咱們能夠看到一個列表
這個列表裏面展現的是查詢出來的全部dump組件包了,咱們看到第一個symfony/var-dumper,composer和組件之間達成了協定,組件名字的第一個信息,以上述爲例symfony表示廠商名,var-dumper表示包名。咱們在命令行安裝組件的時候,要採用這種形式:
// vendor:廠商名 package:包名
composer require vendor/package
因此咱們安裝symfony/var-dumper的時候,命令行輸入:
composer require symfony/var-dumper
composer會自動替咱們找到var-dumper的穩定版給咱們安裝。咱們能夠看到安裝成功提示:
咱們打開目錄能夠看到,在目錄下生成了三個文件
vendor目錄是咱們的組件目錄,composer.json執行命令的結果文件,composer.lock列出了全部的php組件,以及具體版本號。
如今咱們來使用一下這個dump組件,在根目錄中新建一個php文件:
<?php
require "vendor/autoload.php";
dump(['1','2','3']);
dump(123);
首先引入自動加載器,而後使用dump方法來輸出變量,dump方法正是咱們dump組件包裏的一個輸出變量的函數,下圖是運行文件後看到的結果,輸出了不同的打印樣式:
上面composer的安裝和使用已經介紹完畢,接下來,咱們試試看發佈一個簡單PHP組件。其實很簡單,就像本身天天寫功能,把一些公用的方法封裝起來同樣;
在上文的使用中提到過,在咱們開發PHP組件以前,咱們能夠先定義一下本身即將發佈的PHP組件的廠商和包名,好比我要開發一個遍歷目錄下全部文件的組件,那麼我能夠將個人組件名定義爲mingzhongshui/searchfile,mingzhonghsui即是個人廠商名,searchfile是包名,這個組件名將是全局惟一的名稱,以防和其餘組件衝突。另外,咱們在選擇廠商名以前,能夠先在packages中搜索一下,看看有沒有同樣的。
每一個組件都應有本身的命名空間,這個命名空間並不須要與組件的廠商和包名一致。廠商名和包名只是爲了讓composer識別組件,而命名空間則是須要在PHP代碼中使用組件。
composer.json文件是PHP組件中必不可少的文件,這個文件裏面的內容必須是純JSON格式,由於composer會根據這個文件中的內容去加載、安裝PHP組件,我在這裏簡單貼一下composer.json的示例內容,這個composer.json文件就是咱們剛剛下載dump組件中的:
{
"name": "symfony/var-dumper",
"type": "library",
"description": "Symfony mechanism for exploring and dumping PHP variables",
"keywords": ["dump", "debug"],
"homepage": "https://symfony.com",
"license": "MIT",
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"require": {
"php": "^5.5.9|>=7.0.8",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
"ext-iconv": "*",
"twig/twig": "~1.34|~2.4"
},
"conflict": {
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0"
},
"suggest": {
"ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
"ext-symfony_debug": ""
},
"autoload": {
"files": [ "Resources/functions/dump.php" ],
"psr-4": { "Symfony\\Component\\VarDumper\\": "" },
"exclude-from-classmap": [
"/Tests/"
]
},
"minimum-stability": "dev",
"extra": {
"branch-alias": {
"dev-master": "3.3-dev"
}
}
}
裏面根據字面意思應該能理解一部分,我在這裏詳細解釋一番:
以上就是composer.json配置裏面經常使用的參數介紹,接下來,咱們就開發完成一個組件。我爲了演示,寫好了一個組件,在本章一開始就提到的searchfile,內容很簡單:
<?php
namespace Mingzhongshui\File;
/**
* Query directory file
*/
class SearchFile
{
/**
* List Folder Contents
* @param path $folderName Folder name
*/
public function searchAllFile ( $folderName )
{
$result = array();
$handle = opendir($folderName);
if ( $handle ) {
while ( ( $file = readdir ( $handle ) ) !== false ) {
if ( $file != '.' && $file != '..') {
$sonPath = $folderName . DIRECTORY_SEPARATOR . $file;
if ( is_dir ( $sonPath ) ){
$result['dir'][$sonPath] = $this->searchAllFile ( $sonPath );
} else {
$result['file'][] = $sonPath;
}
}
}
closedir($handle);
}
return $result;
}
}
一個簡單的查詢目錄全部文件的組件,我已經把它放在了github倉庫中————地址是searchFile。
咱們能夠經過github倉庫的形式提交到packages,首先咱們得有一個packagist的帳號,能夠經過github登錄packagist,登錄以後,在頁面右上角會有一個submit提交按鈕,輸入組件所在的github倉庫地址
而後點擊check,以後點擊submit,packagist會自動建立組件頁面
咱們能夠看到,packagist自動從組件的composer.json中獲取到了組件的名稱、描述、關鍵字等信息。至此,咱們的組件就發佈成功了。
在命令行輸入
composer require mingzhongshui/searchfile
他會自動幫你安裝searchfile組件,若是出現報錯可使用開發版本:
composer require mingzhongshui/searchfile:dev-master
使用這個的緣由是,有時候composer用的是國內的鏡像,他尚未同步到源鏡像中。
當咱們把PHP組件發佈到packagist以後,若是咱們要更新咱們已經發布的組件時候該如何作呢?這時候有一個懶辦法,設置github鉤子使它自動同步更新packagist的組件。
訪問https://packagist.org/about#how-to-update-packages,這個地址是設置鉤子的說明,咱們找到設置鉤子的url https://packagist.org/api/bitbucket?username=mingzhongshui&apiToken=API_TOKEN,這裏的mingzhongshui是我packagist帳戶名,根據本身的真實狀況替換便可;API_TOKEN指的是本身packagist帳戶中的API TOKEN,在https://packagist.org/profile/頁面中。
打開本身的github PHP組件主頁,在setting中找到Webhooks,添加鉤子,保存
便可。
以上就是關於composer安裝、使用以及發佈的介紹。那麼咱們有一個問題,咱們在實際中如何快速找到優秀的PHP組件呢,外國有位猿友ziadoz已經整理好了一些優秀的組件,而且列了一個列表,在github的連接爲awesome-php,有須要什麼組件的話,能夠來這裏看一下,做爲參考。好了,以上就是關於composer的周邊故事。