创建 PSR-4 的 Php 包-php教程

资源魔 31 0

【相干学习保举:php图文教程

本文是协助初学者搭建根底的 php composer 包, 本名目源码地点

  • github
  • packagist

目次构造以及初建预备

起首创立一个目次来寄存一切文件, 这里我 定名为 util-demo , 目次中需求蕴含两个目次 src/, tests/, 一切的代码需求搁置到 src/ 目次, 一切的测试文件需求搁置到 tests/ 目次

初始化文件夹, 并应用 git 初始化名目, 便于进行版本治理

$ mkdir util-demo
$ cd util-demo
$ git init复制代码

初始化 composer

这里假设你曾经装置了 composer, 假如不装置, 请到 getcomposer.org/download/ 进行装置

初始化并输出包名, 这里默许应用 duoli/util-demo 包名

$ composer init

Welcome to the Composer config generator  
                                            
This co妹妹and 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: phpunit

Found 15 packages matching phpunit

   [0] phpunit/phpunit 
   ...
   [14] brianium/paratest 

Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version): 
Using version ^8.5 for phpunit/phpunit
Search 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]? yes
Loading composer repositories with package information
Updating 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 file
Generating autoload files
5 packages you are using are looking for funding.
Use the `composer fund` co妹妹and to find out more!复制代码

上边初始化实现之后, 咱们文件目次应该以下所示

.
├── composer.json
├── composer.lock
└── vendor复制代码

作为担保理来说, 咱们需求疏忽 composer.lock 以及 vendor 文件夹, 由于正在名目中应用此包的时分会进行全局的装置, 没有提交是为了避免孕育发生冗余代码.

咱们退出 .gitignore 文件, 退出这两个文件夹的疏忽, 另外因为要天生 phpunit 测试文件, 咱们还需求退出 .phpunit.* , 我这里还额定退出了 IDE 的疏忽

.gitignore

# ide
.idea

# project
composer.lock
vendor/

# phpunit
.phpunit.*复制代码

文件主动加载 autoload

autoload

这里是上边初始化不说起到的, 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: php

php:
    – 7.0
    – hhvm

before_script:
    – composer self-update
    – composer install –prefer-source –no-interaction –dev

script: 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 包的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学 PSR-4

抱歉,评论功能暂时关闭!