首页 > 后端开发 > php教程 > 如何构建您的第一个PHP软件包

如何构建您的第一个PHP软件包

Karen Carpenter
发布: 2025-03-06 01:38:08
原创
588 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板