小編給大家分享一下PHP組件、框架以及Composer是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
為嘉黎等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及嘉黎網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、嘉黎網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!組件是一組打包的代碼,是一系列相關(guān)的類、接口和Trait,用于幫助我們解決PHP應(yīng)用中某個(gè)具體問題。例如,你的PHP應(yīng)用需要收發(fā)HTTP請(qǐng)求,可以使用現(xiàn)成的組件如guzzle/guzzle實(shí)現(xiàn)。我們使用組件不是為了重新實(shí)現(xiàn)已經(jīng)實(shí)現(xiàn)的功能,而是把更多時(shí)間花在實(shí)現(xiàn)項(xiàng)目的長遠(yuǎn)目標(biāo)上。
優(yōu)秀的PHP組件具備以下特性:
我們選擇框架時(shí),要為這個(gè)框架的工具投入很多,框架通常會(huì)提供大量工具,但卻沒有提供我們所需的某個(gè)工具時(shí),痛苦就轉(zhuǎn)嫁到我們頭上,我們要尋找并集成自定義的PHP庫。把第三方代碼集成到框架中是件難事,因?yàn)榈谌酱a和框架可能沒有使用相同的接口。
選擇框架時(shí),我們看中的是框架的未來,但是誰又能保證某個(gè)框架始終是完成某項(xiàng)工作最好的工具呢?存在多年的大型項(xiàng)目必須有好的表現(xiàn),而且要時(shí)刻做好調(diào)整,如果選錯(cuò)了PHP框架,可能無法做到這一點(diǎn)。較舊的PHP框架可能由于缺乏社區(qū)支持而變慢或過時(shí),這些舊框架通常使用過程式代碼編寫,而沒有使用新式的面向?qū)ο蟠a以及PHP的一些新特性,總之,決定是否使用PHP框架時(shí),要考慮的事情很多。
慶幸的是,Laravel在這些擔(dān)憂方面表現(xiàn)良好,因此才能在眾多PHP框架中脫穎而出,從某種意義上來說,Laravel也是個(gè)基于組件開發(fā)的框架(核心組件是自身的Illuminate庫,功能實(shí)現(xiàn)上則大量依賴第三方組件),相比Symfony而言,上手又比較簡單,所以兼具了擴(kuò)展性和易用性。但是,Laravel也存在一些不足,比如Laravel自身的組件不能輕易解耦,用于Laravel框架之外(但是相信這種狀況會(huì)有好轉(zhuǎn),比如其數(shù)據(jù)庫和隊(duì)列組件就可以解耦出去)。綜合來看,Laravel仍是一個(gè)出色的框架,能幫組我們快速創(chuàng)建強(qiáng)大的應(yīng)用。
那我們應(yīng)該使用組件還是框架呢?答案是,使用正確的工具做正確的事,如果能通過一些PHP組件快速實(shí)現(xiàn)小型項(xiàng)目,那就使用組件,如果有多個(gè)團(tuán)隊(duì)成員開發(fā)大型項(xiàng)目,而且能從框架提供的約定準(zhǔn)則和結(jié)構(gòu)中受益,那就使用框架(如果是在糾結(jié)使用什么框架,那么選擇Laravel吧,它不會(huì)讓你失望),使用框架能夠引導(dǎo)并加速項(xiàng)目的開發(fā)。
我們?cè)赑ackagist中查找PHP組件,這個(gè)網(wǎng)站用于收集PHP組件,最好的PHP組件在Packagist中都能找到。
比如我們想使用一個(gè)http組件用于收發(fā)HTTP消息,在搜索框中搜索http,得到的第一個(gè)結(jié)果就是Guzzle,就用它吧。
Packagist是查找PHP組件的社區(qū),Composer則是安裝PHP組件的工具。Composer是PHP的依賴管理器,運(yùn)行在命令行中,你告訴Composer需要哪些組件,Composer會(huì)下載并把這些組件自動(dòng)加載到你的項(xiàng)目中,就這么簡單。
Composer和Packagist緊密合作,如果你告訴Composer想要使用guzzlehttp/guzzle
組件,Composer會(huì)從Packagist中獲取guzzlehttp/guzzle
組件,找到這個(gè)組件的倉庫地址,確定要使用哪個(gè)版本,還能找出這個(gè)組件的依賴,然后把guzzlehttp/guzzle
組件及其依賴下載到你的項(xiàng)目中。
此外,Composer會(huì)為項(xiàng)目中的所有PHP組件自動(dòng)生成符合PSR標(biāo)準(zhǔn)的自動(dòng)加載器,有效地抽象了依賴管理和自動(dòng)加載,所以,對(duì)PHP社區(qū)來說,Composer是最重要的附加工具,沒有之一,想想之前我們要使用諸如include、require、spl_autoload_register來手動(dòng)實(shí)現(xiàn)自動(dòng)加載的痛苦日子,這一點(diǎn)也不為過。
關(guān)于Composer的安裝和使用,這里不贅述,請(qǐng)參考Composer中文網(wǎng)。
下面我們通過一個(gè)示例項(xiàng)目來演示如何使用Composer和組件來開發(fā)一個(gè)PHP應(yīng)用,這個(gè)應(yīng)用的作用是掃描一個(gè)CSV文件中的URL,找出死鏈,該應(yīng)用會(huì)向每個(gè)URL發(fā)HTTP請(qǐng)求,如果返回的HTTP狀態(tài)碼大于等于400,就把這個(gè)死鏈發(fā)給標(biāo)準(zhǔn)輸出。這是一個(gè)命令行應(yīng)用,開發(fā)好之后,我們會(huì)執(zhí)行這個(gè)腳本,傳入csv文件的路徑,在標(biāo)準(zhǔn)輸出中顯示死鏈列表。
開始之前,先看看哪些任務(wù)可以使用現(xiàn)有的PHP組件解決:我們需要一個(gè)可以迭代處理csv文件數(shù)據(jù)的組件,此外還要向csv文件中的每個(gè)URL發(fā)送HTTP請(qǐng)求,因此還需要一個(gè)可以發(fā)送HTTP請(qǐng)求并檢查HTTP響應(yīng)的組件。
瀏覽Packagist后,我們找到guzzlehttp/guzzle
和league/csv
兩個(gè)組件,前者用于處理HTTP消息,后者用于處理CSV數(shù)據(jù)。下面我們?cè)陧?xiàng)目最頂層運(yùn)行如下命令:
composer require guzzlehttp/guzzle composer require league/csv
Composer會(huì)將依賴安裝到根目錄的vendor
目錄下,安裝完成后,會(huì)在根目錄下生成composer.json
和composer.lock
文件:
composer.lock
文件中會(huì)列出項(xiàng)目使用的所有PHP組件,以及組件的具體版本號(hào),這其實(shí)是鎖定了項(xiàng)目,讓項(xiàng)目只能使用具體版本的PHP組件。這樣的好處是,composer會(huì)下載這個(gè)文件中列出的具體版本,而不管Packagist中可用的最新版本是多少,你應(yīng)該把composer.lock
文件納入版本控制,這樣讓團(tuán)隊(duì)成員使用的PHP版本和你一樣,如果本地開發(fā)和服務(wù)器使用的PHP組件版本相同,可以盡量降低由組件版本不同導(dǎo)致的bug。
如果確實(shí)要下載最新版本的組件并更新composer.lock
,可以使用composer update
命令。
接下來我們來編寫應(yīng)用代碼,在根目錄下創(chuàng)建一個(gè)scan.php
文件,然后在該文件頂部使用require
導(dǎo)入Composer創(chuàng)建的自動(dòng)加載器:
require 'vendor/autoload.php';
Composer創(chuàng)建的自動(dòng)加載器其實(shí)就是個(gè)名為autoload.php
的文件,保存在vendor
目錄中,Composer下載各個(gè)PHP組件時(shí),會(huì)檢查每個(gè)組件的composer.json
文件,確定如何加載該組件,得到這個(gè)信息后,Composer會(huì)在本地為該組件創(chuàng)建一個(gè)符合PSR標(biāo)準(zhǔn)的自動(dòng)加載器。這樣我們就可以實(shí)例化項(xiàng)目中的任何PHP組件,這些組件按需自動(dòng)加載。
下面我們正式使用Guzzle和CSV組件編寫scan.php
代碼:
//使用composer自動(dòng)加載器 require 'vendor/autoload.php'; //實(shí)例Guzzle Http客戶端 $client = new GuzzleHttp\Client(); //打開并迭代處理CSV $csv = League\Csv\Reader::createFromPath($argv[1]); foreach ($csv as $csvRow) { try { //發(fā)送HTTP GET請(qǐng)求 $httpResponse = $client->get($csvRow[0]); //檢查HTTP響應(yīng)的狀態(tài)碼 if($httpResponse->getStatusCode() >= 400) { throw new Exception(); } } catch (Exception $e) { //把死鏈發(fā)給標(biāo)準(zhǔn)輸出 echo $csvRow[0] . PHP_EOL; } }
下面我們?cè)?code>urls.csv中添加一些URL,一行一個(gè),而且至少有一個(gè)是死鏈:
然后打開終端,執(zhí)行scan.php
腳本:
php scan.php urls.csv
我們傳入了兩個(gè)參數(shù),第一個(gè)是腳本文件scan.php
的路徑,另一個(gè)是CSV文件的路徑。輸出如下:
看完了這篇文章,相信你對(duì)PHP組件、框架以及Composer是什么有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。