中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP組件、框架以及Composer是什么

發布時間:2020-11-02 14:27:10 來源:億速云 閱讀:158 作者:小新 欄目:編程語言

小編給大家分享一下PHP組件、框架以及Composer是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

什么是組件

組件是一組打包的代碼,是一系列相關的類、接口和Trait,用于幫助我們解決PHP應用中某個具體問題。例如,你的PHP應用需要收發HTTP請求,可以使用現成的組件如guzzle/guzzle實現。我們使用組件不是為了重新實現已經實現的功能,而是把更多時間花在實現項目的長遠目標上。

優秀的PHP組件具備以下特性:

  • 作用單一:專注于解決一個問題,而且使用簡單的接口封裝功能
  • 小型:小巧玲瓏,只包含解決某個問題所需的最少代碼
  • 合作:PHP組件之間可以良好合作,組合在一起實現大型項目
  • 測試良好:本身提供測試,而且有充足的測試覆蓋度
  • 文檔完善:應該提供完善的文檔,能讓開發者輕易安裝、理解和使用

組件 vs 框架

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

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

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

那我們應該使用組件還是框架呢?答案是,使用正確的工具做正確的事,如果能通過一些PHP組件快速實現小型項目,那就使用組件,如果有多個團隊成員開發大型項目,而且能從框架提供的約定準則和結構中受益,那就使用框架(如果是在糾結使用什么框架,那么選擇Laravel吧,它不會讓你失望),使用框架能夠引導并加速項目的開發。

使用組件

Packagist

我們在Packagist中查找PHP組件,這個網站用于收集PHP組件,最好的PHP組件在Packagist中都能找到。

PHP組件、框架以及Composer是什么

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

Composer

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

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

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

關于Composer的安裝和使用,這里不贅述,請參考Composer中文網。

示例項目

下面我們通過一個示例項目來演示如何使用Composer和組件來開發一個PHP應用,這個應用的作用是掃描一個CSV文件中的URL,找出死鏈,該應用會向每個URL發HTTP請求,如果返回的HTTP狀態碼大于等于400,就把這個死鏈發給標準輸出。這是一個命令行應用,開發好之后,我們會執行這個腳本,傳入csv文件的路徑,在標準輸出中顯示死鏈列表。

安裝組件

開始之前,先看看哪些任務可以使用現有的PHP組件解決:我們需要一個可以迭代處理csv文件數據的組件,此外還要向csv文件中的每個URL發送HTTP請求,因此還需要一個可以發送HTTP請求并檢查HTTP響應的組件。

瀏覽Packagist后,我們找到guzzlehttp/guzzleleague/csv兩個組件,前者用于處理HTTP消息,后者用于處理CSV數據。下面我們在項目最頂層運行如下命令:

composer require guzzlehttp/guzzle
composer require league/csv

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

PHP組件、框架以及Composer是什么

composer.lock文件中會列出項目使用的所有PHP組件,以及組件的具體版本號,這其實是鎖定了項目,讓項目只能使用具體版本的PHP組件。這樣的好處是,composer會下載這個文件中列出的具體版本,而不管Packagist中可用的最新版本是多少,你應該把composer.lock文件納入版本控制,這樣讓團隊成員使用的PHP版本和你一樣,如果本地開發和服務器使用的PHP組件版本相同,可以盡量降低由組件版本不同導致的bug。

如果確實要下載最新版本的組件并更新composer.lock,可以使用composer update命令。

自動加載

接下來我們來編寫應用代碼,在根目錄下創建一個scan.php文件,然后在該文件頂部使用require導入Composer創建的自動加載器:

require 'vendor/autoload.php';

Composer創建的自動加載器其實就是個名為autoload.php的文件,保存在vendor目錄中,Composer下載各個PHP組件時,會檢查每個組件的composer.json文件,確定如何加載該組件,得到這個信息后,Composer會在本地為該組件創建一個符合PSR標準的自動加載器。這樣我們就可以實例化項目中的任何PHP組件,這些組件按需自動加載。

編寫代碼

下面我們正式使用Guzzle和CSV組件編寫scan.php代碼:

//使用composer自動加載器
require 'vendor/autoload.php';

//實例Guzzle Http客戶端
$client = new GuzzleHttp\Client();

//打開并迭代處理CSV
$csv = League\Csv\Reader::createFromPath($argv[1]);
foreach ($csv as $csvRow) {
    try {
        //發送HTTP GET請求
        $httpResponse = $client->get($csvRow[0]);

        //檢查HTTP響應的狀態碼
        if($httpResponse->getStatusCode() >= 400) {
            throw new Exception();
        }
    } catch (Exception $e) {
            //把死鏈發給標準輸出
            echo $csvRow[0] . PHP_EOL;
    }
}

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

PHP組件、框架以及Composer是什么

然后打開終端,執行scan.php腳本:

php scan.php urls.csv

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

PHP組件、框架以及Composer是什么

看完了這篇文章,相信你對PHP組件、框架以及Composer是什么有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳新县| 隆昌县| 额尔古纳市| 荆门市| 南漳县| 七台河市| 和硕县| 嘉黎县| 漳平市| 巴楚县| 长垣县| 湟中县| 柳林县| 蒙山县| 合水县| 扬州市| 光泽县| 黄梅县| 珠海市| 金沙县| 南宁市| 宜昌市| 蓝山县| 闽清县| 广丰县| 锡林浩特市| 郎溪县| 明水县| 仁布县| 石首市| 孟连| 旺苍县| 嵊泗县| 渭源县| 息烽县| 蒙城县| 芦山县| 康保县| 龙陵县| 北宁市| 常山县|