如何使用和組件來(lái)開(kāi)發(fā)一個(gè)PHP應(yīng)用?(一)
2021-11-01
是一個(gè)尋找PHP組件的社區(qū),是一個(gè)安裝PHP組件的工具。它是 PHP 的依賴管理器。它在命令行上運(yùn)行。您告訴您需要哪些組件,然后您將下載這些組件并將其自動(dòng)加載到您的項(xiàng)目中。就這么簡(jiǎn)單。
與您密切合作。如果你告訴你要使用/,你會(huì)從中獲取/,找到這個(gè)組件的倉(cāng)庫(kù)地址,確定使用哪個(gè)版本,并找出這個(gè)組件的依賴,然后下載/及其依賴在您的項(xiàng)目中。
另外,項(xiàng)目中所有的PHP組件都會(huì)自動(dòng)生成一個(gè)符合PSR標(biāo)準(zhǔn)的自動(dòng)加載器,有效地抽象了依賴管理和自動(dòng)加載。因此,它是 PHP 社區(qū)最重要的附加工具。毫不夸張地說(shuō),我們不得不使用諸如、、和 r 來(lái)手動(dòng)實(shí)現(xiàn)自動(dòng)加載的痛苦日子。
關(guān)于安裝和使用,這里不再贅述,請(qǐng)參考中文網(wǎng)站。
示例項(xiàng)目
下面我們通過(guò)一個(gè)示例項(xiàng)目來(lái)演示如何使用和組件來(lái)開(kāi)發(fā)一個(gè) PHP 應(yīng)用程序。此應(yīng)用程序的作用是掃描 CSV 文件中的 URL 以找出死鏈接。應(yīng)用程序?qū)⑾蛎總€(gè) URL 發(fā)送一個(gè) HTTP 請(qǐng)求。如果返回 如果 HTTP 狀態(tài)碼大于等于 400,則將死鏈接發(fā)送到標(biāo)準(zhǔn)輸出。這是一個(gè)命令行應(yīng)用程序。開(kāi)發(fā)完成后,我們會(huì)執(zhí)行這個(gè)腳本,傳入csv文件的路徑,在標(biāo)準(zhǔn)輸出中顯示死鏈接列表。
安裝組件
在開(kāi)始之前,我們先來(lái)看看使用現(xiàn)有的 PHP 組件可以解決哪些任務(wù):我們需要一個(gè)可以迭代處理 csv 文件數(shù)據(jù)的組件。另外,我們需要向csv文件中的每個(gè)URL發(fā)送HTTP請(qǐng)求,所以我們還需要一個(gè)可以發(fā)送的。HTTP 請(qǐng)求和檢查 HTTP 響應(yīng)組件。
瀏覽之后,我們發(fā)現(xiàn)了/和/csv兩個(gè)組件,前者用于處理HTTP報(bào)文,后者用于處理CSV數(shù)據(jù)。下面我們?cè)陧?xiàng)目的頂層運(yùn)行以下命令:
composer require guzzlehttp/guzzle
composer require league/csv
依賴項(xiàng)將安裝在根目錄中。安裝完成后,根目錄下會(huì)生成.json和.lock文件:
.lock 文件將列出項(xiàng)目使用的所有 PHP 組件,以及組件的具體版本號(hào)。這實(shí)際上鎖定了項(xiàng)目,使項(xiàng)目只能使用特定版本的 PHP 組件。這樣做的好處是,無(wú)論可用的最新版本如何,都將下載此文件中列出的特定版本。您應(yīng)該將 .lock 文件放入版本控制中,以便團(tuán)隊(duì)成員可以使用與您相同的 PHP 版本。如果本地開(kāi)發(fā)和服務(wù)端使用相同版本的PHP組件,可以最大限度的減少不同組件版本帶來(lái)的bug。
如果你真的想下載最新版本的組件并更新.lock,可以使用命令。
自動(dòng)加載
接下來(lái)我們編寫應(yīng)用代碼,在根目錄下創(chuàng)建一個(gè)scan.php文件,然后使用文件頂部創(chuàng)建的自動(dòng)加載器:
require 'vendor/autoload.php';
創(chuàng)建的自動(dòng)加載器實(shí)際上是一個(gè)名為 .php 的文件,該文件保存在目錄中。在下載每個(gè) PHP 組件時(shí),它會(huì)檢查每個(gè)組件的 .json 文件,以確定如何加載該組件。獲取到這些信息后,就會(huì)在本地為這個(gè)組件創(chuàng)建一個(gè)符合 PSR 標(biāo)準(zhǔn)的自動(dòng)加載器。這樣我們就可以實(shí)例化項(xiàng)目中的任何 PHP 組件,這些組件會(huì)根據(jù)需要自動(dòng)加載。
寫代碼
下面我們正式使用和CSV組件來(lái)編寫scan.php代碼:
下面我們?cè)?urls.csv 中添加一些 URL,每行一個(gè)php接口開(kāi)發(fā),其中至少有一個(gè)是死鏈接:
然后打開(kāi)終端,執(zhí)行scan.php腳本:
php scan.php urls.csv
我們傳入了兩個(gè)參數(shù),第一個(gè)是腳本文件scan.php的路徑,另一個(gè)是CSV文件的路徑。輸出如下:
以上內(nèi)容希望對(duì)大家有所幫助。推進(jìn)的過(guò)程中總會(huì)遇到很多問(wèn)題和瓶頸。寫太多業(yè)務(wù)代碼沒(méi)有方向感。我不知道從哪里開(kāi)始改進(jìn)。我整理了這方面的一些資料,包括但不限于:分布式架構(gòu)php接口開(kāi)發(fā),高擴(kuò)展性,高性能,高并發(fā),服務(wù)器性能調(diào)優(yōu),TP6,,YII2,,,,,優(yōu)化,腳本,微服務(wù),以及其他需要的知識(shí)點(diǎn)進(jìn)階進(jìn)階干貨可以免費(fèi)分享給大家。有需要的可以加入我的官方群。點(diǎn)擊這里。