国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

Jul 25, 2016 am 08:43 AM


1、什么是組件
? ?? ???組件是一組打包的代碼,是一系列相關(guān)的類、接口和Trait,用于幫助我們解決PHP應(yīng)用中某個具體問題。例如,你的PHP應(yīng)用需要收發(fā)HTTP請求,可以使用現(xiàn)成的組件如guzzle/guzzle實(shí)現(xiàn)。我們使用組件不是為了重新實(shí)現(xiàn)已經(jīng)實(shí)現(xiàn)的功能,而是把更多時間花在實(shí)現(xiàn)項(xiàng)目的長遠(yuǎn)目標(biāo)上。

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


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

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

? ?? ?? ? 慶幸的是,Laravel在這些擔(dān)憂方面表現(xiàn)良好,因此才能在眾多PHP框架中脫穎而出,從某種意義上來說,Laravel也是個基于組件開發(fā)的框架(核心組件是自身的Illuminate庫,功能實(shí)現(xiàn)上則大量依賴第三方組件),相比Symfony而言,上手又比較簡單,所以兼具了擴(kuò)展性和易用性。但是,Laravel也存在一些不足,比如Laravel自身的組件不能輕易解耦,用于Laravel框架之外(但是相信這種狀況會有好轉(zhuǎn),比如其數(shù)據(jù)庫和隊(duì)列組件就可以解耦出去)。綜合來看,Laravel仍是一個出色的框架,能幫組我們快速創(chuàng)建強(qiáng)大的應(yīng)用。

? ?? ?? ? 那我們應(yīng)該使用組件還是框架呢?答案是,使用正確的工具做正確的事,如果能通過一些PHP組件快速實(shí)現(xiàn)小型項(xiàng)目,那就使用組件,如果有多個團(tuán)隊(duì)成員開發(fā)大型項(xiàng)目,而且能從框架提供的約定準(zhǔn)則和結(jié)構(gòu)中受益,那就使用框架(如果是在糾結(jié)使用什么框架,那么選擇Laravel吧,它不會讓你失望),使用框架能夠引導(dǎo)并加速項(xiàng)目的開發(fā)。

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


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

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

? ?? ?? ?Composer和Packagist緊密合作,如果你告訴Composer想要使用guzzlehttp/guzzle組件,Composer會從Packagist中獲取guzzlehttp/guzzle組件,找到這個組件的倉庫地址,確定要使用哪個版本,還能找出這個組件的依賴,然后把guzzlehttp/guzzle組件及其依賴下載到你的項(xiàng)目中。

? ?? ?? ?此外,Composer會為項(xiàng)目中的所有PHP組件自動生成符合PSR標(biāo)準(zhǔn)的自動加載器,有效地抽象了依賴管理和自動加載,所以,對PHP社區(qū)來說,Composer是最重要的附加工具,沒有之一,想想之前我們要使用諸如include、require、spl_autoload_register來手動實(shí)現(xiàn)自動加載的痛苦日子,這一點(diǎn)也不為過。

? ?? ?? ? 關(guān)于Composer的安裝和使用,這里不贅述,請參考Composer中文網(wǎng)。
4、示例項(xiàng)目
? ?? ???下面我們通過一個示例項(xiàng)目來演示如何使用Composer和組件來開發(fā)一個PHP應(yīng)用,這個應(yīng)用的作用是掃描一個CSV文件中的URL,找出死鏈,該應(yīng)用會向每個URL發(fā)HTTP請求,如果返回的HTTP狀態(tài)碼大于等于400,就把這個死鏈發(fā)給標(biāo)準(zhǔn)輸出。這是一個命令行應(yīng)用,開發(fā)好之后,我們會執(zhí)行這個腳本,傳入csv文件的路徑,在標(biāo)準(zhǔn)輸出中顯示死鏈列表。
安裝組件
? ?? ???開始之前,先看看哪些任務(wù)可以使用現(xiàn)有的PHP組件解決:我們需要一個可以迭代處理csv文件數(shù)據(jù)的組件,此外還要向csv文件中的每個URL發(fā)送HTTP請求,因此還需要一個可以發(fā)送HTTP請求并檢查HTTP響應(yīng)的組件。

? ?? ???瀏覽Packagist后,我們找到guzzlehttp/guzzle和league/csv兩個組件,前者用于處理HTTP消息,后者用于處理CSV數(shù)據(jù)。下面我們在項(xiàng)目最頂層運(yùn)行如下命令:


? ?? ?? ? Composer會將依賴安裝到根目錄的vendor目錄下,安裝完成后,會在根目錄下生成composer.json和composer.lock文件:


? ? composer.lock文件中會列出項(xiàng)目使用的所有PHP組件,以及組件的具體版本號,這其實(shí)是鎖定了項(xiàng)目,讓項(xiàng)目只能使用具體版本的PHP組件。這樣的好處是,composer會下載這個文件中列出的具體版本,而不管Packagist中可用的最新版本是多少,你應(yīng)該把composer.lock文件納入版本控制,這樣讓團(tuán)隊(duì)成員使用的PHP版本和你一樣,如果本地開發(fā)和服務(wù)器使用的PHP組件版本相同,可以盡量降低由組件版本不同導(dǎo)致的bug。

? ?? ?? ? 如果確實(shí)要下載最新版本的組件并更新composer.lock,可以使用composer update命令。
自動加載
? ?? ???接下來我們來編寫應(yīng)用代碼,在根目錄下創(chuàng)建一個scan.php文件,然后在該文件頂部使用require導(dǎo)入Composer創(chuàng)建的自動加載器:


? ?? ???Composer創(chuàng)建的自動加載器其實(shí)就是個名為autoload.php的文件,保存在vendor目錄中,Composer下載各個PHP組件時,會檢查每個組件的composer.json文件,確定如何加載該組件,得到這個信息后,Composer會在本地為該組件創(chuàng)建一個符合PSR標(biāo)準(zhǔn)的自動加載器。這樣我們就可以實(shí)例化項(xiàng)目中的任何PHP組件,這些組件按需自動加載。
編寫代碼
下面我們正式使用Guzzle和CSV組件編寫scan.php代碼:



? ?? ? 下面我們在urls.csv中添加一些URL,一行一個,而且至少有一個是死鏈:


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


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




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


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

熱AI工具

Undress AI Tool

Undress AI Tool

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

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(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)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
PHP變量范圍解釋了 PHP變量范圍解釋了 Jul 17, 2025 am 04:16 AM

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

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

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

在PHP中評論代碼 在PHP中評論代碼 Jul 18, 2025 am 04:57 AM

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

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

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

撰寫PHP評論的提示 撰寫PHP評論的提示 Jul 18, 2025 am 04:51 AM

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

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

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

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

在PHP中獲取字符串特定索引字符可用方括號或花括號,但推薦方括號;索引從0開始,超出范圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長度,動態(tài)字符串需驗(yàn)證有效性,多語言項(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

See all articles