首頁 >後端開發 >php教程 >如何構建您的第一個PHP軟件包

如何構建您的第一個PHP軟件包

Karen Carpenter
Karen Carpenter原創
2025-03-06 01:38:08588瀏覽

How to  Build Your First PHP Package

想要從零開始創建一個PHP包並與其他PHP開發者共享? Composer,這個依賴管理工具,讓這個過程變得輕而易舉!得益於Composer,PHP擁有頂級的包生態系統之一。讓我們一起深入探討,逐步學習如何創建PHP包。

開始入門


本文主要面向PHP新手(或PHP包編寫新手),旨在幫助他們學習如何從零開始創建PHP包。

創建新的PHP包需要完成以下幾項任務:

  • 初始化Git倉庫
  • 創建和配置composer.json文件
  • 安裝依賴項
  • 設置自動加載

雖然我們可以先創建一個空的GitHub項目並將其克隆到本地,但我們將直接在本地創建一個新文件夾,初始化項目,然後之後再將源代碼推送到GitHub:

$ mkdir example-package
$ cd ./example-package
$ git init
$ echo "/vendor/" >> .gitignore
$ composer init
$ git add .
$ git commit -m"第一次提交"
# 稍后您可以添加远程仓库并推送源代码

composer init命令將引導您以交互方式設置項目,設置包名稱、作者、許可證等值,並蒐索包依賴項。您可以隨意填寫這些信息,但為了簡潔起見,以下是我們的起點:

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {}
}

我們擁有了包的基本配置,但它不會完成太多工作。如果包只使用核心PHP語言,則某些包不需要任何依賴項。無論如何,您都需要設置自動加載,以便您的包用戶可以在他們的項目中加載函數和類。

準備好將本地檢出連接到像GitHub這樣的版本控制系統時,您可以按照添加遠程倉庫的說明操作。它可能類似於以下命令:

git remote add origin git@github.com:laravelnews/example-package.git

設置自動加載


創建基本的composer.json結構後,我們可以繼續創建源代碼。您需要決定要在項目中存儲源代碼的位置。文件夾可以隨意命名,但典型的“標準”是src/lib/。 Composer不關心您使用哪個路徑,但是您需要指示Composer使用PSR-4自動加載文件。讓我們使用src文件夾並為我們的示例包創建一個類:

$ mkdir src/
$ touch src/Api.php

接下來,打開composer.json文件並使用"autoload"鍵配置自動加載器:

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "LaravelNews\Feed\": "src/"
        }
    }
}

autoload.psr-4鍵中的屬性將PHP命名空間映射到文件夾。當我們在src文件夾中創建文件時,它們將映射到LaravelNewsFeed命名空間。對於此示例,我們創建了一個Api.php文件,該文件請求並返回Laravel News JSON feed。如果您正在學習,請將以下代碼添加到src/Api.php

<?php namespace LaravelNews\Feed;

class Api
{
    public function json(): array
    {
        $json = file_get_contents('https://laravel-news.com/feed/json');

        return json_decode($json, true);
    }
}

我們如何立即嘗試我們的新類?

有幾種方法,例如通過本地Composer依賴項在另一個項目中需要此包,甚至將代碼推送到GitHub並在我們的包上使用dev-main執行composer update。但是,我們也可以在項目的根目錄中創建一個index.php文件來試用它:

$ mkdir example-package
$ cd ./example-package
$ git init
$ echo "/vendor/" >> .gitignore
$ composer init
$ git add .
$ git commit -m"第一次提交"
# 稍后您可以添加远程仓库并推送源代码

我們使用了Composer的自動加載器,它知道如何加載我們包的文件。為了讓Composer理解如何找到我們的文件,我們需要運行composer install

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {}
}

您也可以在將命名空間添加到composer.json後運行dump-autoload命令來更新Composer的自動加載器。

運行index.php文件使我們可以快速開始使用我們的包,但是,我們也可以通過創建一個測試套件來開始使用我們的代碼。讓我們深入研究如何設置它!

包測試和開發依賴項


我建議您為參與的任何項目編寫測試,並且我喜歡儘早設置測試。在創建PHP包時,最常見的測試框架是PHPUnit。我最近最喜歡的選擇是Pest PHP,我認為您會喜歡它易於設置的方式!

Composer包有兩組需求:require部分包含包運行所需的包,require-dev部分包含測試所需的包。到目前為止,我們沒有任何require包,如果您不需要其他包依賴項,則可能會發生這種情況。

我懷疑您不想從頭開始編寫自己的測試框架,因此我們即將安裝我們的第一個開發依賴項。我們也不總是想向實時JSON端點發出請求,因此我們還將安裝一個模擬庫(Mockery)來模擬HTTP調用:

git remote add origin git@github.com:laravelnews/example-package.git

提示:我建議通過composer.json中的以下配置選項來配置包排序,以保持依賴項井然有序:

$ mkdir src/
$ touch src/Api.php

安裝Pest和Mockery後,我們可以通過--init標誌初始化Pest。創建文件後,我們可以運行pest來測試我們的代碼:

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "LaravelNews\Feed\": "src/"
        }
    }
}

您可以按照自己想要的方式組織包的測試,我建議您查看Pest文檔以了解有關設置Pest的完整詳細信息。

接下來,讓我們創建一個簡單的類,我們可以用它來演示包測試。此類將從Laravel News JSON feed獲取最新文章並返回最新文章。

我們將這個虛構的類命名為NewsChecker,並將其添加到src/NewsChecker.php文件中,內容如下:

<?php namespace LaravelNews\Feed;

class Api
{
    public function json(): array
    {
        $json = file_get_contents('https://laravel-news.com/feed/json');

        return json_decode($json, true);
    }
}

請注意,它將Api類作為依賴項,我們將在測試中模擬它。

接下來,我們將在tests/Feature/NewsCheckerTest.php文件中創建此文件,並添加以下測試以驗證latestArticle()方法:

$ mkdir example-package
$ cd ./example-package
$ git init
$ echo "/vendor/" >> .gitignore
$ composer init
$ git add .
$ git commit -m"第一次提交"
# 稍后您可以添加远程仓库并推送源代码

您可以運行這些測試並通過運行vendor/bin/pest來驗證代碼是否有效。您可以隨意刪除運行pest --init後創建的示例測試。

我們已經涵蓋了很多方面,從初始化Git倉庫,使用composer.json配置PHP包,添加源代碼和測試,以及使用Pest運行它們。從這裡開始,您就可以在Packagist上發布您的包了!

了解更多


我建議您註冊並查看Packagist.org上的文檔,您將在其中發布新版本的包。在Packagist上更新包版本的過程可以自動化,這意味著當您標記包的新版本時,它們將自動顯示在Packagist.org上。

我們逐步學習了從零開始創建包的過程,但是如果您使用GitHub,為您的組織或個人項目創建模板倉庫可以更快地完成!有一些社區傑出的包框架可以用作您下一個Composer包的起點:

{
    "name": "laravelnews/feeds",
    "description": "获取Laravel-News.com的文章",
    "type": "library",
    "require": {}
}

以上是如何構建您的第一個PHP軟件包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn