亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) 后端開發(fā) php教程 最佳實(shí)踐系列——漫談 PHP 組件、框架、Composer 那些事

最佳實(shí)踐系列——漫談 PHP 組件、框架、Composer 那些事

Jul 25, 2016 am 08:43 AM


1、什么是組件
? ?? ???組件是一組打包的代碼,是一系列相關(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)目的長(zhǎng)遠(yuǎn)目標(biāo)上。

? ?? ???優(yōu)秀的PHP組件具備以下特性:
  • 作用單一:專注于解決一個(gè)問題,而且使用簡(jiǎn)單的接口封裝功能;
  • 小型:小巧玲瓏,只包含解決某個(gè)問題所需的最少代碼;
  • 合作:PHP組件之間可以良好合作,組合在一起實(shí)現(xiàn)大型項(xiàng)目;
  • 測(cè)試良好:本身提供測(cè)試,而且有充足的測(cè)試覆蓋度;
  • 文檔完善:應(yīng)該提供完善的文檔,能讓開發(fā)者輕易安裝、理解和使用。


2、組件 vs 框架
? ?? ?? ?我們選擇框架時(shí),要為這個(gè)框架的工具投入很多,框架通常會(huì)提供大量工具,但卻沒有提供我們所需的某個(gè)工具時(shí),痛苦就轉(zhuǎn)嫁到我們頭上,我們要尋找并集成自定義的PHP庫(kù)。把第三方代碼集成到框架中是件難事,因?yàn)榈谌酱a和框架可能沒有使用相同的接口。

? ?? ?? ?選擇框架時(shí),我們看中的是框架的未來(lái),但是誰(shuí)又能保證某個(gè)框架始終是完成某項(xiàng)工作最好的工具呢?存在多年的大型項(xiàng)目必須有好的表現(xiàn),而且要時(shí)刻做好調(diào)整,如果選錯(cuò)了PHP框架,可能無(wú)法做到這一點(diǎn)。較舊的PHP框架可能由于缺乏社區(qū)支持而變慢或過時(shí),這些舊框架通常使用過程式代碼編寫,而沒有使用新式的面向?qū)ο蟠a以及PHP的一些新特性,總之,決定是否使用PHP框架時(shí),要考慮的事情很多。

? ?? ?? ? 慶幸的是,Laravel在這些擔(dān)憂方面表現(xiàn)良好,因此才能在眾多PHP框架中脫穎而出,從某種意義上來(lái)說(shuō),Laravel也是個(gè)基于組件開發(fā)的框架(核心組件是自身的Illuminate庫(kù),功能實(shí)現(xiàn)上則大量依賴第三方組件),相比Symfony而言,上手又比較簡(jiǎn)單,所以兼具了擴(kuò)展性和易用性。但是,Laravel也存在一些不足,比如Laravel自身的組件不能輕易解耦,用于Laravel框架之外(但是相信這種狀況會(huì)有好轉(zhuǎn),比如其數(shù)據(jù)庫(kù)和隊(duì)列組件就可以解耦出去)。綜合來(lái)看,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ā)。

PS:這句話也適用于語(yǔ)言之爭(zhēng),用正確的語(yǔ)言做正確的事,沒事少BB。
3、使用組件
Packagist
? ?? ?? ?我們?cè)赑ackagist中查找PHP組件,這個(gè)網(wǎng)站用于收集PHP組件,最好的PHP組件在Packagist中都能找到。


? ?? ???比如我們想使用一個(gè)http組件用于收發(fā)HTTP消息,在搜索框中搜索http,得到的第一個(gè)結(jié)果就是Guzzle,就用它吧。

Composer
? ?? ?? ?Packagist是查找PHP組件的社區(qū),Composer則是安裝PHP組件的工具。Composer是PHP的依賴管理器,運(yùn)行在命令行中,你告訴Composer需要哪些組件,Composer會(huì)下載并把這些組件自動(dòng)加載到你的項(xiàng)目中,就這么簡(jiǎn)單。

? ?? ?? ?Composer和Packagist緊密合作,如果你告訴Composer想要使用guzzlehttp/guzzle組件,Composer會(huì)從Packagist中獲取guzzlehttp/guzzle組件,找到這個(gè)組件的倉(cāng)庫(kù)地址,確定要使用哪個(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ū)來(lái)說(shuō),Composer是最重要的附加工具,沒有之一,想想之前我們要使用諸如include、require、spl_autoload_register來(lái)手動(dòng)實(shí)現(xiàn)自動(dòng)加載的痛苦日子,這一點(diǎn)也不為過。

? ?? ?? ? 關(guān)于Composer的安裝和使用,這里不贅述,請(qǐng)參考Composer中文網(wǎng)。
4、示例項(xiàng)目
? ?? ???下面我們通過一個(gè)示例項(xiàng)目來(lái)演示如何使用Composer和組件來(lái)開發(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會(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命令。
自動(dòng)加載
? ?? ???接下來(lái)我們來(lái)編寫應(yīng)用代碼,在根目錄下創(chuàng)建一個(gè)scan.php文件,然后在該文件頂部使用require導(dǎo)入Composer創(chuàng)建的自動(dòng)加載器:


? ?? ???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代碼:



? ?? ? 下面我們?cè)趗rls.csv中添加一些URL,一行一個(gè),而且至少有一個(gè)是死鏈:


然后打開終端,執(zhí)行scan.php腳本:


? ?? ?? ?我們傳入了兩個(gè)參數(shù),第一個(gè)是腳本文件scan.php的路徑,另一個(gè)是CSV文件的路徑。輸出如下:




由于上傳附件及文字限制,有時(shí)部分圖片、文字可能顯示不了,詳情請(qǐng)見:http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000610&idx=3&sn=e4974922c197cb2e227d7352376ab0c3#rd
歡迎大家一起交流。
掃描以下二維碼,獲取更多更精美文章!(掃碼關(guān)注有意向不到的驚喜的哦?。。?br> 最佳實(shí)踐系列——漫談 PHP 組件、框架、Composer 那些事
關(guān)注我們微信訂閱號(hào)( uniguytech100) 與服務(wù)號(hào)(uniguytech),獲取更多更精美文章!
也歡迎加入【大家技術(shù)網(wǎng)討論QQ群】,群號(hào)碼:256175955,請(qǐng)備注你個(gè)人的介紹!讓我們一起聊聊it的那些事!


本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
PHP變量范圍解釋了 PHP變量范圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內(nèi)部無(wú)法訪問全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次并在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助于避免錯(cuò)誤并提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗(yàn)證來(lái)源與類型、控制文件名與路徑、設(shè)置服務(wù)器限制并二次處理媒體文件。1.驗(yàn)證上傳來(lái)源通過token防止CSRF并通過finfo_file檢測(cè)真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串并根據(jù)檢測(cè)類型決定擴(kuò)展名存儲(chǔ)至非Web目錄;3.PHP配置限制上傳大小及臨時(shí)目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫(kù)重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評(píng)論代碼 在PHP中評(píng)論代碼 Jul 18, 2025 am 04:57 AM

PHP注釋代碼常用方法有三種:1.單行注釋用//或#屏蔽一行代碼,推薦使用//;2.多行注釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧注釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時(shí)需注意閉合符號(hào)和避免嵌套。

發(fā)電機(jī)如何在PHP中工作? 發(fā)電機(jī)如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評(píng)論的提示 撰寫PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關(guān)鍵在于明確目的與規(guī)范,注釋應(yīng)解釋“為什么”而非“做了什么”,避免冗余或過于簡(jiǎn)單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說(shuō)明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背后的原因,如說(shuō)明為何需手動(dòng)輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說(shuō)明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問題,便于后續(xù)追蹤與協(xié)作。好的注釋能降低溝通成本,提升代碼維護(hù)效率。

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號(hào)或花括號(hào),但推薦方括號(hào);索引從0開始,超出范圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長(zhǎng)度,動(dòng)態(tài)字符串需驗(yàn)證有效性,多語(yǔ)言項(xiàng)目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易于效率,啟動(dòng)啟動(dòng)tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

See all articles