您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

创建 PSR-4 的 Php 包

2024/4/20 1:37:48发布8次查看
【相关学习推荐:php图文教程】
本文是帮助初学者搭建基础的 php composer 包, 本项目源码地址
githubpackagist目录结构和初建准备首先创建一个目录来存放所有文件, 这里我 命名为 util-demo , 目录中需要包含两个目录 src/, tests/, 所有的代码需要放置到 src/ 目录, 所有的测试文件需要放置到 tests/ 目录
初始化文件夹, 并使用 git 初始化项目, 便于进行版本管理
$ mkdir util-demo$ cd util-demo$ git init复制代码
初始化 composer这里假定你已经安装了 composer, 如果没有安装, 请到 getcomposer.org/download/ 进行安装
初始化并输入包名, 这里默认使用 duoli/util-demo 包名
$ composer initwelcome to the composer config generator                                              this command will guide you through creating your composer.json config.package name (<vendor>/<name>) [duoli/util-demo]: 复制代码
输入描述
description []: first util package demo复制代码
输入作者名称, n 跳过
author [duoli <zhaody901@126.com>, n to skip]: 复制代码
设定包的稳定版本, 默认是 stable, 详细查看 minimum-stability (root-only)
minimum stability []: 复制代码
安装类型 : package type, 默认是 library
package type (e.g. library, project, metapackage, composer-plugin) []: 复制代码
license, 协议, 关于协议部分, 你可以选择自己需要的协议, 阮老师这里有一个阅读指南, 可以进行参考 如何选择开源许可证?, 对于协议部分的写法可以参考 许可协议 license 这里
license []: 复制代码
require
设定三方依赖, 表明当前项目/包是否有依赖于其他包进行开发, 这里选择 no,
define your dependencies.# 生产依赖would you like to define your dependencies (require) interactively [yes]? 复制代码
require-dev
开发依赖, 这里我们加入 phpunit 作为单元测试依赖
would you like to define your dev dependencies (require-dev) interactively [yes]?search for a package: phpunitfound 15 packages matching phpunit   [0] phpunit/phpunit    ...   [14] brianium/paratest enter package # to add, or the complete package name if it is not listed: 0enter the version constraint to require (or leave blank to use the latest version): using version ^8.5 for phpunit/phpunitsearch for a package: 复制代码
当不需要额外增加包的时候, 直接回车, 确认安装包依赖, 初始化完成
{    name: duoli/util-demo,    description : first util package demo,    require-dev: {        phpunit/phpunit: ^8.5    },    license: mit,    authors: [        {            name: duoli,            email: zhaody901@126.com        }    ],    require: {}}do you confirm generation [yes]? would you like to install dependencies now [yes]? yesloading composer repositories with package informationupdating dependencies (including require-dev)package operations: 29 installs, 0 updates, 0 removals  - installing sebastian/version (2.0.1): downloading (100%)           ......       - installing phpunit/phpunit (8.5.8): downloading (100%)         sebastian/global-state suggests installing ext-uopz (*)phpunit/phpunit suggests installing phpunit/php-invoker (^2.0.0)package phpunit/php-token-stream is abandoned, you should avoid using it. no replacement was suggested.writing lock filegenerating autoload files5 packages you are using are looking for funding.use the `composer fund` command to find out more!复制代码
上边初始化完成之后, 我们文件目录应该如下所示
.├── composer.json├── composer.lock└── vendor复制代码
作为包管理来讲, 我们需要忽略 composer.lock 和 vendor 文件夹, 因为在项目中使用此包的时候会进行全局的安装, 不提交是为了不产生冗余代码.
我们加入 .gitignore 文件, 加入这两个文件夹的忽略, 另外由于要生成 phpunit 测试文件, 我们还需要加入 .phpunit.* , 我这里还额外加入了 ide 的忽略
.gitignore
# ide.idea# projectcomposer.lockvendor/# phpunit.phpunit.*复制代码
文件自动加载 autoloadautoload
这里是上边初始化没有提及到的, autoload 指定了包的加载方式, composer 可以自动加载包内文件, 但是你需要指定你的文件的加载方式, 这里我们使用的是 psr-4 标准, 详细的规范可以阅读 psr-4 自动加载规范
这里需要在 composer.json 中追加
   ...    autoload: {        psr-4: {            duoli\\utildemo\\: src,            duoli\\utildemotests\\: tests        }    }   ... 复制代码
因为这个加载是后续添加的, 想要识别需要我们手动运行下 composer dumpautoload, 这样才可以识别我们添加的命名空间映射
另这里我额外约定了一个测试的命名空间, 方便对测试文件进行命名空间的目录识别
travis 测试集成如果打算在github上托管包,一个不错优点是集成travis ci,这是一个持续集成应用程序,它会自动运行单元测试文件. 当接受 pr 时,会非常有用,因为你可以快速查看是否所有的测试都通过验证。
要与 travis 集成,添加一个名为 .travis.yml 的文件,并复制以下内容
language: phpphp:    – 7.0    – hhvmbefore_script:    – composer self-update    – composer install –prefer-source –no-interaction –devscript: phpunit复制代码
在这里,不会深入讨论使用 travis 的问题,但这应该是一个很好的开始,你可以自己来进行研究如何使用它.
编写代码现在可以编写代码了, 打开 src 目录创建 file.php 文件, 复制如下代码
class file{    public function extension($filename)    {        return pathinfo($filename, pathinfo_extension);    }}复制代码
如果你曾经查看过旧的 php 包源码,可能会发现一个 duoli/utildemo 目录。psr-4 不再使用嵌套的目录结构,而是允许直接在 src 目录下编写类
编写单元测试现在我们已经编写了包源码,可以开始编写一些测试了。phpunit 需要一个名为 phpunit.xml 的文件来定义一些设置。在根目录中创建一个新的phpunit.xml文件,并复制以下代码:
<phpunit backupglobals="false" backupstaticattributes="false" bootstrap="vendor/autoload.php" colors="true" converterrorstoexceptions="true" convertnoticestoexceptions="true" convertwarningstoexceptions="true" processisolation="false" stoponfailure="false">    <testsuites>        <testsuite name="duoli util test suite">            <directory suffix=".php">./tests/</directory>        </testsuite>    </testsuites></phpunit>复制代码
如果不熟悉这个文件中意思,不用担心,你无需关注设置了哪些内容(当前来讲), 这个文件只是定义一些设置和文件应该如何自动加载的约定.
接下来,在 tests 目录下,创建一个名为 strtest.php的文件,并复制以下代码:
<?php namespace duoli\utildemotests;use duoli\utildemo\file;use phpunit\framework\testcase;class filetest extends testcase{ public function testextension() { $extension = file::extension('readme.md'); $this->assertequals('md', $extension);    }}复制代码
打开命令行并运行:
$ ./vendor/bin/phpunit复制代码
phpunit 会自动运行测试,并给出一个绿色的 ok (1 test, 1 assertion) 输出。
在编写测试文件时,需要确保测试类继承了 phpunit\framework\testcase
文档最后要做的是创建一个 readme.md 的文档。如果打算在 github上托管代码,这个文件会在代码页面显示出来,目的是描述包以及包如何工作.
还应该在源代码中包含一个许可证。默认情况下,你发布的任何东西都是你的版权所有,如果你想让其他人使用你的代码,你需要给它一个许可。一个好的选择是 mit 许可
发布到 github 和 packagist现在已经完成了你的包,你可以将它推到 github 和 packagist。
github 是一个托管的 git 存储库服务,它使得在软件协作变得非常容易。
packagist 是查找和使用 php 包的服务商
要将代码推送到 github,创建一个新的存储库, 然后设定 git 的远端, 将代码推上去即可, 命令是
$ git remote add origin git@github.com:username/demo.git  $ git push -u origin master  复制代码
在 github 上集成 packagist 和 travis, 需要找到设置, 并且在  webhooks & services 部分找到这两个服务, 集成这两个服务需要授权 github 账户并且设置一些简单的步骤.
概括如果以前从未开发过已发布的 php 包,那么需要考虑很多问题。然而,一旦你操作过不止一次就不至于这么复杂了.
php 的包结构非常简单,而 psr-4 使其更加简单。一旦了解了该结构的每一部分是用于做什么,其他人阅读 php包就会容易很多.
参考文章how to create a psr-4 php package相关学习推荐:php编程(视频)
以上就是创建 psr-4 的 php 包的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录