CleanMyMac

PHP Composer 教學,為您的 PHP 專案注入活力

Feature image for PHP Composer 教學,為您的 PHP 專案注入活力

什麼是 PHP Composer

PHP Composer 是一個用於 PHP 的依賴管理工具。它允許您管理專案所需的函式庫、框架和元件,並能自動地下載和安裝這些依賴。Composer 使用一個名為 composer.json 的設定檔案來追蹤專案的依賴。

php composer icon

其中,最主要的優點包括:

依賴管理

Composer 可以下載專案所需的特定版本的函式庫和框架。

版本控制

確保專案中使用的所有依賴都是特定版本,避免版本衝突。

自動載入

透過自動載入機制,方便地使用第三方程式碼。

社群支援

廣泛的社群支援和豐富的第三方函式庫。

指令碼執行

composer.json 檔案中,您可以定義自訂指令碼來執行常見的任務,例如清除快取或執行測試。

使用 Composer,您不只是獲得了便捷的依賴管理,也為您的開發流程帶來了結構性和一致性。

什麼是 PHP Autoload

PHP 自動載入(Autoload)主要是為了解決大型專案中程式碼組織和管理的問題。在沒有自動載入的情況下,你需要手動使用 requireinclude 語句來載入每一個使用到的 PHP 檔案。這會導致幾個問題:

程式碼繁瑣

當專案規模增大,手動管理所有的 requireinclude 變得非常繁瑣和容易出錯。

維護困難

每次新增或移動檔案,都需要更新 requireinclude 語句,這增加了維護的複雜性。

效能問題

載入過多不必要的檔案會浪費系統資源,尤其是當只有少量檔案實際被用到時。

可讀性差

過多的 requireinclude 語句會讓程式碼難以閱讀和理解。

使用自動載入,你可以讓 PHP 在需要時動態地載入類別或檔案,這樣就避免了上述問題。這不僅簡化了程式碼,也使得維護和擴展變得更容易。常用的自動載入實作方式有 PSR-4 和 Composer,這些工具更進一步提升了 PHP 專案的組織和管理能力。

什麼是 PSR-4

PSR-4 是由 PHP-FIG(PHP Framework Interop Group)訂定的一個自動載入規範。這個規範定義了如何自動地從檔案系統載入對應於某個命名空間或類別名稱的 PHP 類別、介面或特性。

在大型或複雜的 PHP 專案中,手動引入每一個類別或檔案是不實際的。PSR-4 規範允許開發者定義一組規則,使得專案能自動地找到和載入類別,這大大提高了開發效率。

composer.json 檔案中,您可以定義一個 PSR-4 自動載入規則。舉例來說:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

這裡,所有在 App 命名空間下的類別都會在 src/ 目錄中找到。

假設有一個類別 UserControllersrc/Controllers/UserController.php,您可以如下使用:

namespace App\Controllers;

class UserController {
    //...
}

由於已經定義了 PSR-4 的自動載入規則,當您嘗試實例化或存取這個類別時,Composer 的自動載入器會自動找到並載入這個類別。

Composer vs PSR-4

Composer 是一個用於管理依賴和自動載入等多種任務的專案層面工具,而 PSR-4 則是一個關於如何自動載入 PHP 類別的標準。Composer 經常以 PSR-4 作為自動載入功能。

特點/工具ComposerPSR-4
主要功能依賴管理器自動載入標準
自動載入通常使用 PSR-4 自動載入單獨專注於自動載入類別
應用範圍專案範圍類別範圍
社群支援強大(許多函式庫以 Composer package 形式提供)較少(主要是一個標準規範)
其他功能支援自訂指令碼,版本控制等
複雜性較高(管理依賴,版本控制等)較低(僅僅規定如何根據命名空間和目錄結構自動載入類別)
與其他工具的關係可以使用 PSR-4 或其他自動載入標準通常被 Composer 或其他自動載入器用作自動載入的規則

簡單來說,Composer 是用於依賴管理和安裝,而 PSR-4 主要是為了優化自動載入。兩者通常會一起使用,以達到最佳的開發效率。

如何使用 Composer

這裡我們會建立一個實際範例:

安裝 Composer

在終端機中執行以下命令 (使用 macOS 範例):

brew install composer

其它 OS 系統請參考 getcomposer.org

相關教學:你的 MacBook 沒有安裝 Homebrew 嗎?不要猶豫了快來安裝

初始化 Composer 專案

在終端機中,移至您的專案資料夾,然後執行:

composer init

這會產生一個 composer.json 檔案,用於記錄依賴。

新增套件

要新增一個套件,您只需執行:

composer require <package-name>

使用套件

在您的 PHP 檔案中,只需加上以下一行程式碼即可:

require 'vendor/autoload.php';

常用的 Composer 指令教學

composer init

用途:初始化一個新的 Composer 專案,並建立 composer.json 檔案。

說明
這個命令會引導您進行一系列問題,以設定新專案的 composer.json 檔案。您可以指定專案名稱、描述、作者等。一旦完成,一個基本的 composer.json 檔案就會在您的專案目錄中被建立。

composer require <package-name>

用途:安裝指定的套件(package)到專案中。

說明
這個命令會將指定的套件和其依賴安裝到您的專案中。同時,它也會更新 composer.jsoncomposer.lock 檔案,記錄下已安裝套件的資訊。

composer update

用途:更新專案的依賴套件。

說明
這個命令會查看 composer.json 檔案,並更新所有列出的依賴套件到最新版本。這也會更新 composer.lock 檔案。

composer remove <package-name>

用途:移除已安裝的套件。

說明
這會從專案中刪除指定的套件,並更新 composer.jsoncomposer.lock 檔案。

composer dump-autoload

用途:重新產生自動載入檔案。

說明
如果您手動更改了 composer.json 檔案或者對檔案結構進行了更改,這個命令會重新產生 vendor/autoload.php 檔案,確保所有的類別都能被正確地自動載入。

composer show

用途:顯示專案依賴的詳細資訊。

說明
這個命令會列出所有安裝在專案中的依賴套件,以及它們的版本、描述和更多。

以上是 Composer 最常用的基本指令,對於日常的 PHP 開發來說,掌握這些基本操作是非常有幫助的。